Javaでファイナリゼをカバーする()方法の実例コード


本論文で研究したのは主にJavaにおけるフィナリゼ()をカバーする方法に関する一次試みであり、具体的には以下のように実現される。
テストコード

package com.alioo.gc;

/**
 *     :
 *
 */
public class FinalizeEscapeGC{
  public static FinalizeEscapeGC instance=null;
  public void isAlive(){
    System.out.println("yes,i am still alive");
  }
  @Override
  protected void finalize() throws Throwable {
    super.finalize();
    System.out.println("finalize methode executed");
    instance=this;
  }

  public static void main(String [] args) throws InterruptedException {
    instance=new FinalizeEscapeGC();

    instance=null;
    System.gc();
    Thread.sleep(1000);
    instance.isAlive(); //     finalize   ,     nullpointerException 

    instance=null;
    System.gc();
    Thread.sleep(1000);
    instance.isAlive();
  }
}
実行結果:
finalize methode executed
yes,i am still alive
Exception in thread「main」java.lang.Null PointerException
at comp.alioo.gc.Finalize Escape GC.main(Finalize Escape GC.java:29)
at sun.reflect.NativeMethodAccess orImpl.invoke 0(Native Method)
at sun.reflect.NativeMethodAccess orImpl.invoke(NativeMethodAccess orImpl.java:62)
at sun.reflegating.MethodAccess orImpl.invoke(Delegating MethodAccess orImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at comp.intellij.rt.execution.appMain.main(AppMain.java:134)
説明:
まずinstance=nullを実行します。後にinstance.isAlive()を実行します。finalizeを書き換える方法がない場合は、null pointerExceptionに報告します。
しかし、実際に実行した結果、脱出に成功し、失敗したのは、どのオブジェクトのfinalize()方法もシステムによって自動的に呼び出されるだけで、対象が次の回収に直面したら、そのfinalize()方法は再実行されないからです。
締め括りをつける
この救い方には大きな不確実性がありますので、それを使わずに、この方法の存在を忘れてください。
以上がJavaにおいてフィナリゼ()をカバーする方法の実例コードの全部です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。