EN JP CN

JD.UMC.FINALIZE

JD.UMC.FINALIZE

JD.UMC.FINALIZE は、オブジェクトの finalize() メソッドの明示的な呼び出しがメソッドに含まれることを示します。

脆弱性とリスク

オブジェクトファイナライザメソッドは、JVM によって 1 度だけ実行されることになっています。したがって、明示的に呼び出すのは好ましくない手法です。特定の JVM とその実装方法によっては、オブジェクトファイナライザメソッドを 2 度呼び出すことにより、不適切な挙動になることがあります。

軽減と防止

ファイナライザはまったく使用せず、別の名前で明示的な終端メソッドを作成するのは良い方法です。絶対に必要な場合には、ファイナライザがオブジェクトファイナライザメソッドを "セーフティーネット" として呼び出すことができます。

例 1

11     OutputStream st;
12     protected void finalize() throws Throwable {
13         if (st!=null) st.close();
14         super.finalize();
15     }
16 
17     void run() throws Throwable{
18         // ...
19         finalize();
20     }

JD.UMC.FINALIZE が 19 行目の呼び出しに対して報告されています。'finalize()' メソッドの呼び出しがあります。このメソッドは、明示的に呼び出すことにはなっていません。