`
孙健坤
  • 浏览: 42263 次
  • 性别: Icon_minigender_1
  • 来自: 长春
最近访客 更多访客>>
社区版块
存档分类
最新评论

基本类型和引用类型的内存分配

阅读更多

基本数据类型常被称为四类八种

四类:1,整型 2,浮点型 3,字符型 4,逻辑型

八种:1,整型3种 byte,short,int,long

2,浮点型2种 float,double

3,字符型1种 char

4,逻辑型1种 boolean

除了四类八种基本类型外,所有的类型都称为引用类型



基础类型的内存分配

基础类型的内存分配很简单,就一块内存,int i=0内存中就会有一个空间名字叫i里边的值为0。



引用类型的内存分配

引用类型占两块内存,String s = new String(“person”),栈内存(内存貌似被分成了好几块,有一块叫栈的,还有一块叫堆)中会为s分配一块内存空间,它里面有值,但这个值不是new出来的这个新对象,而是一个可以代表地址或者说是引用还可以说是指针的一个独一无二的值(谁说java里没有指针,只不过人家不这样叫),这个唯一的值指向堆内存中new出来的新对象,所以s代表的这个值大致上可以说是这个对象的地址,只不过这个地址是可以改变的,换句话说就是s代表的这个值也可以指向别的对象。那么为什么新new出来的对象要放在堆内存中呢,我不懂,不过听‘据’说是因为堆内存比较大,可以容下未知大小的新对象,再具体是怎么回事我就听不懂了。

说说java世界中大名鼎鼎的‘垃圾回收器’吧,这个东西很神秘,至少我是没见过他的模样。听‘据’说,当一个堆内存中的对象没有被栈内存中表示地址的值“引用”时,这个对象就被称为垃圾对象,它无法被使用但却占据着内存中的区域,好比这样:

String s = new String(“person”); s = new String(“man”); s本来是指向堆内存中值为person的对象的,但是s突然讨厌person了,它指向了堆内存中的man对象了,person就像一个孤儿一样被s遗弃了,但是person比孤儿还要惨,因为没有什么能找的到它,除了位高权重的‘垃圾回收器’,不过被当官的找到往往没什么好事,尤其是这个‘垃圾回收器’,它会豪不留情把‘垃圾’们清理走,并且无情的销毁,以便释放内存。

分享到:
评论

相关推荐

    Java中的基本类型和引用类型变量的区别

    Java 中的基本类型和引用类型变量是两个不同的概念,它们在内存分配、变量赋值和函数传递等方面有着本质的区别。 基本类型是 Java 中的八种基本类型,包括 byte、short、int、long、float、double、char 和 boolean...

    值类型和引用类型的区别

    另外,如果实例会被频繁地用于Hashtable或者ArrayList之类的集合中,这些类会对其中的值类型变量进行装箱操作,这也 会导致额外的内存分配和内存拷贝操作,从应用程序性能方面来看,其实也不划算。 哦对了,上面提到...

    Java基础--基本数据类型与引用数据类型在内存结构上的区别

    数据类型与引用数据类型在内存结构上的主要区别在于它们存储方式和内存分配的不同。在Java中,数据类型分为两种:基本数据类型(如int、char、boolean等)和引用数据类型(如对象、数组等)。 一、基本数据类型 ...

    Java内存分配浅析

    在方法调用过程中,局部变量(包括基本类型和引用类型)都会在栈中分配空间。当方法执行完毕,栈上的局部变量所占的空间会被立即释放。如果引用类型的变量在方法内部指向了新的对象,那么原对象的引用会被丢弃,但...

    分配内存单元

    5. **内存碎片**:内存分配和释放过程中可能会产生两种类型的碎片:内部碎片(分配的空间大于实际需求)和外部碎片(空闲但无法使用的内存块)。合理的内存管理策略可以减少碎片,提高内存利用率。 6. **虚拟内存**...

    值类型和引用类型Demo

    值类型和引用类型在内存分配、性能、默认值以及垃圾回收等方面也有所不同。值类型通常在栈(stack)上分配内存,而引用类型在堆(heap)上分配。栈上的内存分配速度快,但空间有限;堆上的内存分配较慢,但空间大。...

    java内存分配情况

    2. **栈(Stack)**:栈内存主要存放基本类型变量(如int、double等)和对象的引用。当一个方法被调用时,一个栈帧会被创建,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。一旦方法执行完毕,栈帧就会...

    值类型与引用类型(.html)

    在C#编程语言中,值类型和引用类型是两种基本的数据类型,它们在内存管理和数据存储方式上有着显著的区别,这对于理解和优化代码性能至关重要。本文将深入探讨这两种类型的特性和应用场景。 1. 值类型(Value Types...

    值类型和引用类型补充

    值类型通常在栈上分配内存,而引用类型在堆上分配。栈内存管理速度快,但空间有限;堆内存可以动态分配,空间大,但管理相对复杂,可能导致垃圾回收。 在性能方面,值类型通常比引用类型更快,因为它们没有引用开销...

    内存分配源代码MemoryAllocation.rar

    然而,如果程序中存在大量临时对象或者有显式内存管理的需求,可能会有自定义的内存分配和释放策略。 2. **内存池**:为了提高内存分配效率,JVM可能会使用内存池技术,预先分配一大块内存,然后从中按需分配小块...

    C#中的值类型和引用类型

    1. 值类型在栈上存储,内存分配和回收速度快,适用于小对象和频繁创建销毁的情况。 2. 引用类型在堆上存储,适合大型复杂对象和需要共享数据的情况,但可能导致内存碎片。 异常处理: 1. 值类型通常不会引发空引用...

    java中内存分配

    "java中内存分配" Java 中的内存分配是 Java 程序员必须掌握的重要知识。JAVA 中内存分配的问题是指 Java 程序在运行时如何在内存中存储数据的过程。Java 程序运行时有 6 个地方可以存储数据,它们分别是寄存器、栈...

    C#值类型与引用类型区别

    这种特性使得值类型通常在处理小型数据时更高效,因为它们的内存分配和回收速度较快。 相对的,引用类型包括类(class)、接口(interface)和数组。引用类型变量并不直接存储实际数据,而是存储一个指向堆(heap)...

    java内存分配演示程序

    2. **栈内存**:栈主要用于存储基本类型变量和对象引用。每当一个方法被调用时,都会在栈上创建一个栈帧,包含局部变量表、操作数栈、动态链接和返回地址。当方法执行完毕,栈帧就会被销毁,其所占的内存随之释放。 ...

    Java中的各种数据类型在内存的的存储方式

    Java中的内存管理机制包括对象的分配和释放两个过程。对象的分配是由程序员通过new关键字来完成的,例如:Rectangle rect = new Rectangle(3, 5); 对象的释放是由垃圾回收机制来完成的,垃圾回收机制会监控每个对象...

    C#源代码-值类型和引用类型.zip

    在C#编程语言中,值类型和引用类型是两种基本的数据类型分类,它们在内存管理、性能和使用方式上有着显著的区别。理解这两者之间的差异对于编写高效且可靠的C#程序至关重要。 一、值类型(Value Types) 1. 定义:...

    java程序中的内存分配问题

    2. **栈内存**:栈主要用于存储方法的局部变量,包括基本类型和对象引用。每当一个方法被调用,都会在栈上创建一个新的栈帧,用于存放局部变量、操作数栈和方法返回地址等信息。当方法执行完毕,栈帧就会被弹出,其...

    Java中堆内存与栈内存分配浅析

    在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存...

    浅谈C#中的值类型和引用类型

    C#只有两种数据类型:值类型和引用类型 值类型在线程栈分配空间,引用类型在托管堆分配空间 值类型转为引用类型称成为装箱,引用类型转为值类型称为拆箱 以下是值类型和引用类型对照表 从上图可以简单看出:string...

    6个重要的NET概念栈,堆,值类型,引用类型,装箱,拆箱

    而堆是用于存储复杂对象,如类实例的地方,它的内存分配和释放是由程序员控制或者由垃圾回收器自动处理。堆内存分配相对较慢,但能支持更大的内存需求。 值类型和引用类型是.NET中的两种主要变量类型。值类型,如...

Global site tag (gtag.js) - Google Analytics