最近看到很多文章在形如程序:
class A{
....
}
class B{
A a = new A();
void f(){....
  a = null;}
}
一定要将 a = null; 写上么,为什么会有人说不写则垃圾无法回收。
我看到对这个问题有同意这个观点的,也有反对的。
请问究竟用不用,给个确切的答案。(我是初学者)
谢谢了!!!

解决方案 »

  1.   

    垃圾回收机制收“垃圾”是等内存要不足的时候,
    它将回收没有被  引用  这个的对象,也就是没有用的,没有把值等于null。
    可能这个对象还被一个句柄引用着
      

  2.   

    如果a引用指向的对象没有用了,又不做a = null; 且a(其实就是指针)又一直存在,那么gc是不会释放a指向的对象的
      

  3.   

    那就是说,用完后,一定要设a=null了,是么,但是看一楼的说法,好像能够自动回收!
    如果不能得话,能否再说的详细些!!
    谢谢
      

  4.   

    能够自动回收,只不过是时间的问题 在=null的情况多是出与对集合的操作 ,再集合中如果不显示的=空那么着块占用的内存将会长驻内存 ,以至于服务器在一端时间后效率下降句柄其实就是指向你要创建对象的一个连接,只有通过这样的“连接”,实例化的对象才可以在内存地址中被找到
      

  5.   

    一般对占用较大内存的对象使用完后将引用置为null,便于系统及时回收
    小的无所谓
      

  6.   

    置为null的话也不一定能够立即回收,这完全是由JVM决定的,不过推荐使用置为null
      

  7.   

    没必要的,在java中不需要关心那些。不像在c++中
      

  8.   

    只要在一定的策略下,没有指向该对象的句柄存在,该对象就可以被JVM回收,但是也不一定就会立即回收,有一个策略过程。与该对象是否为null没有关系
      

  9.   

    在一定的策略下,JVM都会对“无用”的对象进行回收,但不会立刻进行回收,毕竟Java里没有构造函数,主要取决于你的策略。而对对象进行null赋值,又不能说没用,这可以可以减少对象的一个引用数,让对象在回收的队列里可以排得靠前一点~~~
      

  10.   

    哦,明白了许多。
    也就是说,如果我在用完a后,设置 a = null,还是有用的。
    只是在小程序中体现不出来而已。谢谢大家!!