1

私は「Joshua Bloch による効果的な Java プログラミング」を読んでいました。この本では、実行が保証されていないため、「ファイナライズ」ブロックを使用しないようにアドバイスしています。詳細に?

4

3 に答える 3

1

andrewmu によって言及されたもの以外に、ファイナライザーに関する別の問題は、頻繁に作成/破棄されるオブジェクトに関連しています。

作成/破棄率が高いクラスのファイナライザーを定義すると、ファイナライザー スレッドに負荷がかかり、これらのオブジェクトのガベージ コレクション率が低下する可能性があります。これらのオブジェクトは、GC の実行時にすぐに解放されるのではなく、最初にファイナライズされるまでファイナライザー スレッド キューで待機します。これにより、メモリ不足エラーのリスクが高まります。

于 2010-08-05T11:07:16.613 に答える
1

finalize の 1 つの問題は、プログラムが呼び出しても呼び出されないことです。System.exit()これに対処するには、Josh Block がRuntime.addShutdownHook()代わりに使用することをお勧めします。

于 2010-08-05T10:30:57.250 に答える
0

プラス: super.finalize()を呼び出すのを忘れた場合、バグである可能性があります。そのため、 finalize() の実装はエラーが発生しやすいです。

于 2010-08-21T16:36:43.187 に答える