Java コンストラクタ/デストラクタとガベージ・コレクションとの関係

Javaのコンストラクタとデストラクタの紹介をします。タイトルにデストラクタと書いたもののJavaにはデストラクタはありません。思想として無いので、これからも追加実装されることは無いでしょう。しかしデストラクタ的なものがあり、これはガベージ・コレクションと密接に関わりがあります。

それでは、それぞれの詳細をご紹介していきます。

コンストラクタ

インスタンス生成時に呼ばれる関数です。クラス名と同じ名前にします。引数の数は任意です。インスタンスの初期化処理を行うための処理です。

デストラクタ

デストラクタはインスタンスが解放される前に呼び出される処理ですが、Javaにはありません。Javaの思想に基づいたもので、インスタンスが解放されるのは自動で行われます。

これに対して、デストラクタの無い言語は「オブジェクト指向を名乗るな」など一部で過激な発言が飛び出しています。

デストラクタ的なものとしてfinalize()があげられることがありますが、ガベージ・コレクションと関連があり、使用するのに注意が必要です。finalize()はインスタンスが解放されるタイミングで実施されるのではなく、ガベージ・コレクションが実施されるタイミングで実施されます。

Oracle JDK9 API仕様 finalize

分かりやすい記事
http://lab.astamuse.co.jp/entry/2018/07/25/114500

ガベージ・コレクション

ガベージ・コレクションは使用しなくなったオブジェクトを一定の条件で消去します。しかしガベージ・コレクションでの(インスタンス含む)オブジェクト消去前に、finalize()が呼ばれるとは限りません。

詳細はこの記事がわかりやすいです。

Let's share SNS