关于引用数据类型成员变量堆内存分配问题
我们知道非静态成员变量,随着new 出来的对象存放在堆内存中。如果该成员变量是已初始化的引用数据类型。那么该对象中的这个引用数据类型变量是存放地址,还是一个对象?例子:
class Person{
Heart myHeart = new Heart();
}
class Heart{
}
这个例子里,Person对象里面的变量myHeart,在堆内存中,那么myHeart在堆内存里只存放Heart对象的首地址,还是heart对象就是直接在Person这个对象所分配的空间里呢?
堆和栈是两个功能不同的内存空间,堆内存是靠GC来清理垃圾的,栈是自动释放。那么myHeart是在堆里,如果它存放的是地址,指向Heart对象,那么这个引用和对象岂不都要靠GC来清理?
感觉说的有点绕~菜鸟请理解。 成员变量 内存 jvm --------------------编程问答-------------------- myHeart是引用类型的变量,存放在栈里,它指向堆中的Heart对象 --------------------编程问答-------------------- --------------------编程问答-------------------- gc判断对象是否有引用指向此对象,如果没有基本上这个对象就算垃圾对象,会被回收 --------------------编程问答--------------------
类成员变量不是随对象存在堆内存中吗??越来越糊涂了~~ --------------------编程问答--------------------
如果该引用是在堆中,那么该引用不会自动释放,会一直指向此对象呢? --------------------编程问答-------------------- myHeart确实应该存在于堆内存,没注意 --------------------编程问答--------------------
这个问题求解答 --------------------编程问答--------------------
栈中存放的是堆中对象的引用。
自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc --------------------编程问答--------------------
这个myHeart变量不应该是随Person对象存放在堆中吗? --------------------编程问答--------------------
myHeart是引用类型的变量,存放在栈里,它指向堆中的Heart对象
栈中存放的是堆中对象的引用。
自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc
这个myHeart变量不应该是随Person对象存放在堆中吗?
初始化的时候分为两部分,先在堆中新建一个对象,然后再栈中引用它,myHeart就是存放在栈中的变量,对象是放在堆中的 --------------------编程问答--------------------
myHeart是引用类型的变量,存放在栈里,它指向堆中的Heart对象
栈中存放的是堆中对象的引用。
自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc
这个myHeart变量不应该是随Person对象存放在堆中吗?
初始化的时候分为两部分,先在堆中新建一个对象,然后再栈中引用它,myHeart就是存放在栈中的变量,对象是放在堆中的
myHeart应该是存放在堆内存中,它是成员变量,不是局部变量。 --------------------编程问答--------------------
myHeart是引用类型的变量,存放在栈里,它指向堆中的Heart对象
栈中存放的是堆中对象的引用。
自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc
这个myHeart变量不应该是随Person对象存放在堆中吗?
初始化的时候分为两部分,先在堆中新建一个对象,然后再栈中引用它,myHeart就是存放在栈中的变量,对象是放在堆中的
myHeart应该是存放在堆内存中,它是成员变量,不是局部变量。
不管是成员变量还是局部变量都是一样的道理 --------------------编程问答-------------------- 楼主别绕了 楼上正解 初始化的时候分为两部分,先在堆中新建一个对象,然后再栈中引用它,myHeart就是存放在栈中的变量,对象是放在堆中的 不管是成员变量还是局部变量都是一样的道理 你要是是在理解不了就直接记住就可以了
补充:Java , Java SE