Java オブジェクトのファイナライズ

制約事項: 次の説明はネイティブ コードのみに該当します。

Java ランタイムには、不要になったオブジェクトを自動的に破棄するガベージ コレクターがあります。ガベージ コレクターは、他のいっさいのオブジェクトから参照されていないオブジェクトを削除します。COBOL プログラムで Java オブジェクトへのプロキシを作成すると、その Java オブジェクトへの参照が COBOL ランタイム システムで保持され、Java ガベージ コレクターによるオブジェクトの破棄が防止されます。

Java オブジェクトが不要になったときには、そのオブジェクトへの参照を COBOL プログラム内で明示的に解放して、ガベージ コレクターで破棄させる必要があります。この処理を行わないと、アプリケーションでメモリリークが発生します。具体的には、次の呼び出しを実行します。

invoke javaobject "finalize" returning javaobject

returning パラメーターは必須です。このパラメーターを省略すると、COBOL ランタイム システムは COBOL プロキシを破棄するかわりに、呼び出した Java オブジェクトにメッセージを渡します。このメッセージを受信した Java オブジェクトは、次の関数を呼び出します。

public void finalize()

この関数は、すべての Java クラスに継承または実装されており、Java ガベージ コレクターによって、オブジェクトを破棄する前に呼び出されます。

通常、Java クラスの finalize() メソッドには戻り値はありません。ただし、使用する Java クラスが値を戻す finalize() メソッドを実装しているようであれば、オブジェクト指向 COBOL プロキシを破棄する手段として、finalize のかわりに次の delete メソッドを使用してください。

invoke javaobject "delete" returning javaobject