JAVA内存中堆与栈的区别
区分
在函数中定义的一些基本类型的变量和对象引用都是在函数的堆栈内存中分配
堆内存用于存放由new创建的对象和数组
在堆内存中分配的内存,由java虚拟机自动垃圾回收来管理。在堆内存中产生了一个数组或对象后,还可以在栈内存中定义一个变量,这个变量可以作为数组或对象的应用变量,在程序使用过程中就可以通过引用变量来来访问堆内存中的数组和对象。
java中对象的引用及存储
Person p = new Person();
这行代码创建了Person实例,这个Person对象被被赋给p变量。
Person类定义来看,Person对象包含两个属性需要被存储,这都需要内存来存储。
一
类本身也是种引用型数据类型,因此程序中定义的Person类型的变量实际上是一个引用,它被放到了栈内存中,指向实际的Person对象;
而真正的Person对象则放在堆内存中。
当一个对象创建成功了,对象保存在堆内存中,Java程序不允许直接访问堆内存中的对象,只能通过该对象的引用来操作对象。
p引用变量本身只存储了一个地址,冰未包含任何实际的数据,但其指向实际对象Person,当访问p时,访问的是p所引用的对象及方法。
多个对象可以对应多个引用。
如果堆内存中的对象没有任何变量指向该对象,那么程序也将无法访问该对象,此时该对象变成了垃圾,
java的垃圾回收机制将会回收该对象,释放该对象所占用的内存。
`