オブジェクトをメモリから再利用するときに、例外が GC によって無視されるタイミングがよくわかりません。
finalize メソッドを使用している場合try/catch
、常に実行されていることがわかります...では、例外がスローされないのはどのような場合ですか?
ありがとう。
メソッドはfinalize
ファイナライザースレッドによって実行されます。例外をスローすると、ファイナライザーはそれを無視します(飲み込みます)。そうしないと、ファイナライザスレッドが停止します。これは、スローされ、コード(内部)によってキャッチされない例外に適用されますfinalize()
。例外をキャッチした場合、それは通常通りのビジネスです。
2つの既存の回答は、ファイナライザーがキャッチされていない例外を無視すると言っているようです。これは、ここでの答えと矛盾しているように見えます: JSLへの正しい参照を持っているように見えるファイナライズメソッドの例外。キャッチされていない例外は、関連するオブジェクトのファイナライズを中止しますが (おそらくリソースをリークします)、ファイナライザー スレッド自体は他のオブジェクトのファイナライズを続行します。これは実験結果と一致します。
これは、メソッドからスローされた例外finalize
が無視されることを意味します。ただし、その中の例外は通常どおり機能します。