Javaでファイナリゼをカバーする()方法の実例コード
本論文で研究したのは主にJavaにおけるフィナリゼ()をカバーする方法に関する一次試みであり、具体的には以下のように実現される。
テストコード
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においてフィナリゼ()をカバーする方法の実例コードの全部です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。
テストコード
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においてフィナリゼ()をカバーする方法の実例コードの全部です。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。