2

ファイルをいくつかの情報とともに保存して閉じるために、 finalize メソッドがオーバーライドされたオブジェクトを作成しました。そのオブジェクトは別のオブジェクトから弱参照されています。GC が発生したときにオブジェクトに変更を保存したいと考えています。そのため、ファイナライズのコードをオーバーライドしました。

ただし、ファイナライズ メソッドは、オブジェクトがガベージ コレクションされる直前に呼び出されます。これは、ガベージ コレクションの対象になった後であればいつでも可能です。

私はこれを望んでいません.GCが発生したらすぐにファイナライズメソッドを呼び出したいのですが、遅延があってはなりません。これを達成するために設定できるjvmオプションはありますか?? 私が見ることができる唯一の他の方法は「System.runFinalization()」ですが、それは粘着性のようです?? もっとエレガントな方法はありますか?

ありがとう

4

1 に答える 1

6

GCが発生したらすぐにfinalizeメソッドを呼び出したいのですが、

内部 API を使用せずに使用することはお勧めしません。

ラグがあってはなりません。

ラグは必ずあります。ファイルを閉じるだけでも数ミリ秒かかります。これが発生している間にアプリケーションがフリーズしても大丈夫ですか (GC の実行中にアプリケーションがフリーズする可能性があるため)

もっとエレガントな方法はありますか?

決定論的に行いたい場合は、終了時にリソースを閉じます。

于 2012-09-17T18:05:20.870 に答える