第4行:aobj 、 bobj都指向原来的bobj(以后简称b)所引用的空间,原来aobj(以后简称a)所引用的空间引进没有引用,所以空间a符合垃圾收集器的收集标准第5行:aobj 、 cobj都指向原来的cobj(以后简称c),但aobj指向的空间为b,还有bobj在引用,因此b,c空间都有引用,不符合垃圾收集器的收集标准第6行:将cobj设为空,但空间c仍有aobj引用,因此也不符合第7行:将cobj设为空,空间c以无引用,空间c符合垃圾收集器的收集标准最终答案:第4和第7行

解决方案 »

  1.   

    是第7行。因为cobj和aobj都引用同一个对象,但此时(到第7行时)已经没有任何引用变量引用这个对象,那么这个对象被标识给垃圾收集器了。
      

  2.   

    我认为也是4,7
    jia0(佳)分析对
      

  3.   

    我问过SUN总裁了,他说:答案是  7
      

  4.   

    分析一下啦,根据JVM规范前三行在JVM中的结果---------------------------------
    |            JVM                |
    _________________________________  |           |           |
     aobj        bobj        cobj4.aobj = bobj; ---------------------------------
    |            JVM                |
    _________________________________              |           |
     aobj   --   bobj        cobj5.aobj = cobj; ---------------------------------
    |            JVM                |
    _________________________________              |           |
     aobj   --   cobj        bobj6.cobj = null;---------------------------------
    |            JVM                |
    _________________________________                        |
     aobj   --   cobj        bobj到6就符合GC垃圾收集的要去了吧,收集的时候aobj和cobj会一并...
      

  5.   

    public class TestGc{
        String obj;
        public TestGc(String obj){
        this.obj = obj;
    }
            public static void main(String[] args){ 
                    
                     TestGc aobj = new TestGc ("aobj");                  TestGc bobj = new TestGc ("bobj");                  TestGc cobj = new TestGc ("cobj");                  aobj = bobj;                  aobj = cobj;                  cobj = null;                  aobj = null;                 System.gc(); 
            } 
            public void finalize(){ 
                     System.out.println(obj+" 被回收 "); 
            } 
    } 运行结果:
    aobj 被回收
    cobj 被回收
      

  6.   

    我这样理解对不对?程序执行到第7行时,aobj cobj所占内存被回收
      

  7.   

    不完全对,因为aobj cobj所占用的空间在不断的变化,应该说aobj cobj刚开始时所占内存被回收,也就是我所说的:“
    第4行:aobj 、 bobj都指向原来的bobj(以后简称b)所引用的空间,原来aobj(以后简称a)所引用的空间引进没有引用,所以空间a符合垃圾收集器的收集标准第5行:aobj 、 cobj都指向原来的cobj(以后简称c),但aobj指向的空间为b,还有bobj在引用,因此b,c空间都有引用,不符合垃圾收集器的收集标准第6行:将cobj设为空,但空间c仍有aobj引用,因此也不符合第7行:将cobj设为空,空间c以无引用,空间c符合垃圾收集器的收集标准最终答案:第4和第7行

    在第4行时原来aobj刚开始引用的空间a符合,在第7行时原来cobj刚开始引用的空间c符合!呵呵!顺便说一句,什么时候结题给分呢?我说的应该是正确答案阿!
      

  8.   

    呵呵,我画的是JVM中的内存情况,大家应该学习一下JVM规范,我觉得如果说4是肯定不对的,因为显然BOBJ是一个有效的对象
      

  9.   

    楼上的理解错了,在4中是aobj原来引用的空间符合回收标准,而不是bobj
      

  10.   

    答:第7行。 
    行1-3分别创建了Object类的三个对象:aobj,bobj,cobj 
    行4:此时对象aobj的句柄指向bobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。 
    行5:此时对象aobj的句柄指向cobj,所以该行的执行不能使aobj符合垃圾收集器的收集标准。 
    行6:此时仍没有任何一个对象符合垃圾收集器的收集标准。 
    行7:对象cobj符合了垃圾收集器的收集标准,因为cobj的句柄指向单一的地址空间。在第6行的时候,cobj已经被赋值为null,但由cobj同时还指向了aobj(第5行),所以此时cobj并不符合垃圾收集器的收集标准。而在第7行,aobj所指向的地址空间也被赋予了空值null,这就说明了,由cobj所指向的地址空间已经被完全地赋予了空值。所以此时cobj最终符合了垃圾收集器的收集标准。 但对于aobj和bobj,仍然无法判断其是否符合收集标准。 
    总之,在Java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个: 
    1.给对象赋予了空值null,以下再没有调用过。 
    2.给对象赋予了新值,既重新分配了内存空间。 
    最后再次提醒一下,一块内存空间符合了垃圾收集器的收集标准,并不意味着这块内存空间就一定会被垃圾收集器收集。 
      

  11.   

    正确答案:4 ,7
    回收的条件就是对象没有被引用。我讲了两年的java了都这么讲的
      

  12.   

    我认为也是4,7
    同jia0(佳)的分析
      

  13.   

    回复人: benjaminliang(ben) ( ) 信誉:100  2004-10-18 17:20:59  得分: 0  
    正确答案:4 ,7
    回收的条件就是对象没有被引用。我讲了两年的java了都这么讲的你这样讲是不完整的。在java中符合垃圾回收的有好几种情况。其中最常见的是:
    1、没有任何引用指向的对象;
    2、互相指向的两个引用变量,也叫做“隔离岛”,英文原文我忘了。总之,在分析此类问题时,请大家在纸上画个对象图,一个引用变量。这样指来指去,很容易就看出什么时候,哪个对象可以被GC回收了。
      

  14.   

    >>www863(心网)
    >>总之,在Java语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个: 
    >>1.给对象赋予了空值null,以下再没有调用过。 
    >>2.给对象赋予了新值,既重新分配了内存空间。第4行怎么会不符合垃圾收集器收集标准2呢???
      

  15.   

    我也给大家看一道题目:Which of the following statements are true?  1
    1) Methods cannot be overriden to be more private
    2) Static methods cannot be overloaded
    3) Private methods cannot be overloaded
    4) An overloaded method cannot throw exceptions not checked
       in the base class
      

  16.   

    按C++的指针,操作数操作码来说是4.7
    但jvm不知怎么实现的!
      

  17.   

    掌握分析方法,这并不是个问题。【开 Eclipse 版的999个理由 & 需要理由吗?】
    http://community.csdn.net/Expert/topic/3472/3472604.xml
      

  18.   

    同意 j2nix(八月风清) 这是GC设计的两种方法不过主要的设计方法还应该是“所有没死的对象,都应该能最终找到它在栈,或者在静态存储区内的reference”(这个关系链可以跨好几层对象)
      

  19.   

    学习ING……等待正确答案ING……