は、私は、出力がこのgc()メソッドを使用した後、Java finalize()メソッドが呼び出されませんか?オブジェクトが破棄されようとしているとき
Number of objects :1
Number of objects :2
Program about to terminate
Number of objects :1
Program about to terminate
Number of objects :0
のようになることが期待
class counterTest{
public static int count;
public counterTest(){
count++;
}
}
public class finalize {
public static void main(String args[]){
counterTest obj1=new counterTest();
System.out.println("Number of objects :" + counterTest.count);
counterTest obj2=new counterTest();
System.out.println("Number of objects :" + counterTest.count);
Runtime rs=Runtime.getRuntime();
obj1=null;
obj2=null;
rs.gc();
}
protected void finalize(){
System.out.println("Program about to terminate");
counterTest.count--;
System.out.println("Number of objects :" + counterTest.count);
}
}
、私が書いていると呼ばれるJavaで次のプログラムをfinalize()
方法の動作を確認するには
しかし、私はちょうど最初の2行を取得しています。オブジェクトの参照をnullにしてからgc()
メソッドを呼び出すため、finalize()
メソッド内に記述されたステートメントを表示する必要があります。つまり、gc()
メソッドを使用するたびにfinalize()
メソッドが呼び出されるという保証はありませんか?
gcをコールしてもファイナライズの実行が保証されるわけではありませんが、これは推奨します。 – gevorg
@Sai [java code convention](http://www.oracle.com/technetwork/java/codeconventions-150003.pdf)を参照してください。 –
[Javaでガベージコレクションを強制する方法?](http://stackoverflow.com/questions/1481178/how-to-force-garbage-collection-in-java) – gevorg