Button b = new Button();......b = null;执行到上面这一行为止,Button b所占用的内存空间有没有被回收?最好能讲出个道理来,或者能给出相关的参考资料

解决方案 »

  1.   

    用到这里的时候 b 所占用的内存并没有释放。
    b是一个句柄,他的生命周期是从创建时开始,到这个方法结束时回收。b = NULL;
    这样写,就把 原来b与原来他指向的对象给隔离了。
    目的是为了让gc尽快地将b原来指向的那个对象清理掉。至于b自己,还是上面所说的 方法结束时回收
      

  2.   

    B = NULL并不是说引用对象B就没有了,只是让他成为空引用,指向空。
    至于什么使命释放,一般来说是一个方法结束的时候,但是这个也并不一定。主要是由垃圾回收器GC来决定什么时候回收内存。
      

  3.   

    原来new出来得对象就应该被回收了
      

  4.   

    这个时候b所指向的对象是可以被回收了,什么时候回收是GC说了算,你可以不管了。
      

  5.   

    过一段时间回收,首先b的引用变量的地址为null,那么b就没有指向任何对象,这个时候这个对象就是象‘脱了线的野马没人管’,Java虚拟机在一段时间内进行自检发现对象没有被引用就将其消毁。
      

  6.   

    GC的机制就不需要关了
    JAVA会在它自认为合适的时候删除这个对象所以JAVA里没有类似C的析构函数
    因为对象删除的时机无法确定
      

  7.   

    你把Button换成自己写的一个类,然后在这个类里重写finalize方法,在finalize里面System.out一些东西,就能看得比较清楚了
      

  8.   

    public class A{
       public void finalize(){
         System.out.println("对象销毁"); 
       }   public static void main(String[] args){
         A a = new A();
         a = null;
       }
    }JVM会自动查找没有有效引用得对象,然后释放空间,但是时机是不确定得,即使你调用System.gc()也不能保证全都收集
      

  9.   

    to  Rick_ang(东方未名)
    怎么什么也没打印出来啊
    (底子薄)
      

  10.   

    A a = new A();
         a = null;System.gc();
      

  11.   

    b只是个引用而已..b=null就表示不不指向new Button()了。。它只是个空引用。。这里之后系统就有意思回收new Button()了。