java垃圾回收之对象生存or死亡

/**
 * 此代码演示了亮点
 * 1.对象可以被GC时自我拯救
 * 2.这种自救的机会只有一次,因为一个对象的finalize()方法最多只会被系统自动调用一次
 *
 */
public class FinalizeEscapeGC {
 
 public static FinalizeEscapeGC SAVE_HOOK = null;
 
 public void isAlive(){
  System.out.println("yes,i am still alive");
 }
 
 @Override
 protected void finalize() throws Throwable{
  super.finalize();
  System.out.println("finalize method executed!");
  FinalizeEscapeGC.SAVE_HOOK = this;
 }
 /**
  * @param args
  * @throws InterruptedException
  */
 public static void main(String[] args) throws InterruptedException {
  SAVE_HOOK = new FinalizeEscapeGC();
  
  //对象第一次成功拯救自己
  SAVE_HOOK = null;
  System.gc();
  //因为Finalizer方法优先级很低,暂停0.5秒,以等待他
  Thread.sleep(1000);
  if(SAVE_HOOK!=null){
   SAVE_HOOK.isAlive();
  }else{
   System.out.println("no,i am dead");
  }
  
  SAVE_HOOK = null;
  System.gc();
  //因为Finalizer方法优先级很低,暂停0.5秒,以等待他
  Thread.sleep(1000);
  if(SAVE_HOOK!=null){
   SAVE_HOOK.isAlive();
  }else{
   System.out.println("no,i am dead");
  }
 }
}

原文地址:https://www.cnblogs.com/jggz/p/3013415.html