第一种正确,引用此object的方法如果没有return,必然是保持着对object的引用。引用计数是最早的垃圾算法,但它对于对象间有交叉引用的情况是很麻烦的。

解决方案 »

  1.   

    当一个对象没有活动线程可访问它时,它就符合垃圾收集的条件。 一个对象可以有不同的方式符合垃圾收集的条件: 
    ·如果指向这个对象的引用变量设置为 null,那么只要没有其他引用指向它,这个对象就符合垃圾收集的条件。 
    ·如果指向这个对象的引用变量改为指向别的对象,那么只要没有其他引用指向它,这个对象就符合垃圾收集的条件。 
    ·在方法本地创建的对象当方法返回时就符合垃圾收集的条件,除非它被导出到方法以外(即它被返回或者作为异常抛出)。 
    ·彼此引用的对象,如果没有活动线程访问它们中的任意一个,那么它们就符合垃圾收集的条件。 援引自——scjp认证课程
      

  2.   

    那通知垃圾收集启动一般是用什么
    我见过几种
    把reference设为null,调用System.gc(),实现finalize呵呵,搞不清了
      

  3.   

    TO killme2008(我不会编程) :
    在Java中,永远不要试图去控制垃圾收集的调度。那不是你的事,你也无法去控制。:)
    即便你调用了System.gc()也不保证这点,呵呵。
      

  4.   

    TO killme2008(我不会编程) :
    那就丢弃对这个对象的引用就可以了。:)
      

  5.   

    呵呵:)
    那么设置为null会不会更快?
      

  6.   

    TO killme2008(我不会编程) :
    呵呵,你认为呢?
    比如这么一个方法体:
    {
        Object obj = new Object();
        ...
        ...
        ...
        return;
    }
    退出方法体之后obj这个引用自然就被丢弃了。
    {
        Object obj = new Object();
        ....
        obj = null; // 哦,不用了!
        ...
        ...
    }
    退出方法体之前,你就丢弃了obj这个引用了。
    好像是快一点哦。:)但是,你能保证gc在什么时候把这个obj给回收掉?呵呵,好像不能吧?那你争这个时间做什么?
      

  7.   

    关注这个也没用!java对垃圾的回收完全是jvm控制,你控制不了的!如果你想注重效率还不如多关注一下多线程!
      

  8.   

    其实我也是在做一道scjp的题的时候有此疑问的,谢谢各位的回答。如没什么问题我想明天结贴!谢谢各位!:)