这题该选D……GC的调用是不确定的,一般在内存不够的情况会调用……

解决方案 »

  1.   

    可是好象不对啊,这是一道SCJP的题目,国外有人说选a
      

  2.   

    同意ender的说法,即GC的自动调用发生在下列情况:
    1。想要在java堆分配中分配新的空间,却发现空间不够;
    2。分配永久对象时;
    但是不能选d,因为不能保证在程序中不出现内存空间不够的情况;由于这里问的是最可能出现自动调用GC的地方,因此每一个new都有嫌疑,不理解为什么会选a,他没有给出解释吗?
    BTW:此程序编译通不过,Object []Obj2=new Object[1]; 中的Obj2应为obj2。
      

  3.   

    应该选D,因为函数中new 了两个对象,一个是Object对象obj1,一个是Object类型的数组对象obj2,并且将数组的第一个成员指向obj1,然后返回数组的第一个成员,所以没有对象在这个函数的调用中会(或者说有可能)被回收。GC的调用是不确定的,不是内存不够就去回收没有用的对象,ender(ender)第二句说错了,具体你可以参考java的文档。
    网上有人说选a,但网上的答案并不能保证,他并没有说出理由,是吗?好多Mock Exam上的答案都有错的!
      

  4.   

     hehe, 我感觉也是选D gc的运行好像是不能控制的.
      

  5.   

    同意zhangchunlei(张春雷) 
    但是数组对象在方法结束后就应该可以被回收了,所以我觉得有可能在方法结束后可能会gc
      

  6.   

    to zhangchunlei(张春雷):java手册上是怎么说的?
    在没有明确的权威性答案之前,我觉得这个问题要研究java虚拟机的源码才能真正搞清楚。我看的是j2me中的kvm源码,在这里确实是内存不够或分配永久对象时才会启动GC,不过可能j2se或j2ee的vm由不同的实现方法。