2

こんにちは、ファントム参照について 1 つ疑問があります。私が理解しているのは、オブジェクトがガベージ コレクションに向かう直前に finalize メソッドが呼び出されることです。ただし、オブジェクトがガベージ コレクションの対象でない場合、finalize メソッドは実行されません。

この finalize メソッドが呼び出されるときのファントム参照について話します。

ファイナライズは常にファントム参照で呼び出されます。

私はこれについて非常に混乱しています。私を助けてください。

4

3 に答える 3

5

ファントム参照があるかどうかに関係なく、ファイナライザーが呼び出されることは保証されません。コードの重要な部分でファイナライザーに依存しないでください。ファイナライザーがタイムリーに呼び出されるという保証はなく、実際にはまったく呼び出されないからです。

多くの人は、正しく使用するのが非常に難しいため、ファイナライザーをまったく使用しないでくださいと主張しています。

于 2011-04-16T19:34:07.317 に答える
1

オブジェクトがファントム参照を介してのみ使用可能になると、最初のGCfinalize()メソッドが呼び出された後、2番目のGCの後に参照がキューに入れられます。その後、ファントム参照がクリーンアップされた場合(またはそれ自体が使用できなくなった場合)、3番目のGCの後にメモリがクリアされます。

于 2011-10-14T06:05:47.733 に答える
0

Finalize は、予期したときに常に呼び出されますが、必ずしも呼び出されるわけではありません。JVM のシャットダウン時にのみ呼び出しが行われる場合があります (単純にプログラムを強制終了しないと仮定します)。finalize()重要な仕事をするために頼るべきではありません。finalize()しかし、有用な関数を実装して呼び出しを含めることも良い習慣super.finalize()です。

于 2011-04-16T19:37:06.380 に答える