问一个JAVA中垃圾回收机制的问题
Button   b   =   new   Button();   
 ......   
 b   =   null;   
 执行到上面这一行为止,Button   b所占用的内存空间有没有被回收?最好能讲出个道理来,或者能给出相关的参考资料 
------解决方案--------------------用到这里的时候 b 所占用的内存并没有释放。 
 b是一个句柄,他的生命周期是从创建时开始,到这个方法结束时回收。   
 b = NULL; 
 这样写,就把 原来b与原来他指向的对象给隔离了。 
 目的是为了让gc尽快地将b原来指向的那个对象清理掉。   
 至于b自己,还是上面所说的 方法结束时回收
------解决方案--------------------B = NULL并不是说引用对象B就没有了,只是让他成为空引用,指向空。 
 至于什么使命释放,一般来说是一个方法结束的时候,但是这个也并不一定。主要是由垃圾回收器GC来决定什么时候回收内存。
------解决方案--------------------过一段时间回收,首先b的引用变量的地址为null,那么b就没有指向任何对象,这个时候这个对象就是象‘脱了线的野马没人管’,Java虚拟机在一段时间内进行自检发现对象没有被引用就将其消毁。
------解决方案--------------------GC的机制就不需要关了 
 JAVA会在它自认为合适的时候删除这个对象   
 所以JAVA里没有类似C的析构函数 
 因为对象删除的时机无法确定
------解决方案--------------------public class A{ 
    public void finalize(){ 
      System.out.println( "对象销毁 ");  
    }   
    public static void main(String[] args){ 
      A a = new A(); 
      a = null; 
    } 
 }   
 JVM会自动查找没有有效引用得对象,然后释放空间,但是时机是不确定得,即使你调用System.gc()也不能保证全都收集