日期:2014-05-20  浏览次数:20648 次

Java面试问题之二十
请问从Java垃圾回收器的角度来看,堆区对象有几种状态,对象处于什么状态时垃圾回收器会对该对象进行回收?

答:在Java虚拟机的垃圾回收器来看,堆区中的每个对象都可能处于以下三种状态之一:
      (1)可触及状态:当一个对象被创建之后,只要程序中还有引用变量引用它,那么它就始
              终处于可触及的状态。
      (2)可复活状态:当程序不再有任何引用变量引用一个对象的时候,它就进入了可复活状
              态。在这种状态中,垃圾回收器会准备释放它占用的内存资源,在释放之前,会调用
              它及其处于可复活状态对象的finalize()方法,这些finalize()有可能使得该对象重新复
              活而回到可触及状态。
      (3)不可触及状态:当Java虚拟机执行完所有可复活对象的finalize()方法之后,假如这些
              方法都没有使该对象重新回到可触及状态,那么该对象就进入不可触及状态。只有当
              对象处于不可触及状态时,垃圾回收器才会真正回收该对象的占用的内存资源。