解决方案 »

  1.   

    myHeart是引用类型的变量,存放在栈里,它指向堆中的Heart对象
      

  2.   

    myHeart确实应该存在于堆内存,没注意
      

  3.   

    栈中存放的是堆中对象的引用。
    自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc
      

  4.   

    栈中存放的是堆中对象的引用。
    自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc
    这个myHeart变量不应该是随Person对象存放在堆中吗?
      

  5.   

    栈中存放的是堆中对象的引用。
    自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc
    这个myHeart变量不应该是随Person对象存放在堆中吗?
    初始化的时候分为两部分,先在堆中新建一个对象,然后再栈中引用它,myHeart就是存放在栈中的变量,对象是放在堆中的
      

  6.   

    栈中存放的是堆中对象的引用。
    自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc
    这个myHeart变量不应该是随Person对象存放在堆中吗?
    初始化的时候分为两部分,先在堆中新建一个对象,然后再栈中引用它,myHeart就是存放在栈中的变量,对象是放在堆中的
    myHeart应该是存放在堆内存中,它是成员变量,不是局部变量。
      

  7.   

    栈中存放的是堆中对象的引用。
    自动释放栈中的变量,之后堆中的对象就没有指向他的引用了,gc回收的时候会判断堆中的对象是否被引用了,如果没有被引用就会被gc掉,如果有引用此对象,就不会被gc
    这个myHeart变量不应该是随Person对象存放在堆中吗?
    初始化的时候分为两部分,先在堆中新建一个对象,然后再栈中引用它,myHeart就是存放在栈中的变量,对象是放在堆中的
    myHeart应该是存放在堆内存中,它是成员变量,不是局部变量。
    不管是成员变量还是局部变量都是一样的道理
      

  8.   

    楼主别绕了  楼上正解  初始化的时候分为两部分,先在堆中新建一个对象,然后再栈中引用它,myHeart就是存放在栈中的变量,对象是放在堆中的   不管是成员变量还是局部变量都是一样的道理 你要是是在理解不了就直接记住就可以了
      

  9.   

    myheart是存放在堆中Person的对象之中的,而myheart又保存着Heart对象在堆中的地址,所以meheart又指向Heart的对象
      

  10.   

    myHart是成员变量,存在于堆中。new Person()对象一共占16个字节,且连续:myHeart指针占4字节(指向堆中的new Heart())、类型信息指针占4字节、引用计数int占4字节、隐含指向Object的指针占4字节;
    GC线程的回收属于典型的"后序回收",就像“删除文件夹一样”,会先删除子文件、再删除文件夹,是一个递归的算法。
    懂了?
      

  11.   

    gc优先回收没有指向的引用,一般定义对象引用使用完后,myHeart  = null ,myHeart会被优先回收掉。
      

  12.   

    堆和栈是两个功能不同的内存空间,堆内存是靠GC来清理垃圾的,栈是自动释放。那么myHeart是在堆里,如果它存放的是地址,指向Heart对象,那么这个引用和对象岂不都要靠GC来清理
    ------------------------------------------
    楼主这个理解没问题啊 
      

  13.   

    这个正解,不过还需要在堆中一块方法区存着Person和Heart两个类