可触及的
1.从根节点可以触及到这个对象
可复活的
1.一旦所有引用被释放,就是可复活状态
2.因为在finalize()中可能复活该对象
不可触及的
1.在finalize()后,可能会进入不可触及状态
2.不可触及的对象不可能复活
3.可以回收
package vm; /** * Created by Administrator on 2017/5/30. */ public class CanReliveObj { public static CanReliveObj obj; @Override protected void finalize() throws Throwable { super.finalize(); System.out.println("CanReliveObj finalize called"); obj=this; } @Override public String toString(){ return "I am CanReliveObj"; } public static void main(String[] args) throws InterruptedException{ obj=new CanReliveObj(); obj=null; //可复活 System.gc(); Thread.sleep(1000); if(obj==null){ System.out.println("obj 是 null"); }else{ System.out.println("obj 可用"); } System.out.println("第二次gc"); obj=null; //不可复活 System.gc(); Thread.sleep(1000); if(obj==null){ System.out.println("obj 是 null"); }else{ System.out.println("obj 可用"); } } }
CanReliveObj finalize called
obj 可用
第二次gc
obj 是 null