Java には finalize メソッドが用意されており、ガベージ コレクターがメモリを解放するときに最初に Finalize を呼び出しますが、いくつかの誤解があります。
1)、オブジェクトはガベージ コレクションされない場合があります。
2) ガベージ コレクションは「破壊」とは異なり、finalize は デストラクター ではありません。
3) ガベージ コレクションはメモリにのみ関連します。
4)、ガベージ コレクションとファイナライズはすべて信頼性が低く、JVM がメモリを使い果たしていない限り、メモリのリサイクルに時間を浪費することはありません。
finalize を呼び出すための前提条件:
1)、System.gc() の実行時など、すべてのオブジェクトがガベージ コレクションによって自動的に呼び出されます
2)、プログラム の終了時に各オブジェクトに対して Finalize() メソッドが呼び出されます
3) 明示的に Finalize メソッドを呼び出す
非メモリ リソースのクリーンアップを完了するために Finalize メソッドを使用することは推奨されませんが、次の目的で使用することをお勧めします。 (1) ローカル オブジェクト (作成されたオブジェクト) のクリーンアップJNI 経由)。 (2)
特定の非メモリ リソース (ソケット、ファイル、ポートなど) を確実に解放するための一般的な形式として
finalize() メソッド:
protected void finalize() { //finalization code here }
簡単なコード例:
public class FinalizationDemo { public static void main(String[] args) { Cake c1 = new Cake(1); Cake c2 = new Cake(2); Cake c3 = new Cake(3); c2 = c3 = null; System.gc(); //Invoke the Java garbage collector } } class Cake extends Object { private int id; public Cake(int id) { this.id = id; System.out.println("Cake Object " + id + "is created"); } protected void finalize() throws java.lang.Throwable { super.finalize(); System.out.println("Cake Object " + id + "is disposed"); } }
実行結果:
りー以上がJavaキーワードfinalizeを使用するサンプルコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。