[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

「デストラクタ」と「ファイナライザ」の違い

スポンサーリンク

予備知識


用語意味
オブジェクト指向「モノ(どんな奴でどう動く)」に注目した考え方
プログラミング言語プログラムの元ネタ(ソースコード)を書くときに使う言葉
クラスオブジェクト指向で使う概念で「それがどんなものか(設計図)」
インスタンスオブジェクト指向で使う概念で「実体」。クラスをnewしたもの
関数何かを入れると何かをして何かを返してくれる、プログラムの部品
メソッドオブジェクト指向における「操作」を定義したもの。動作としては関数と同じ
ガベージコレクタ定期的にメモリを解放してくれる管理人

ガベージコレクタについて、もう少し詳しく見ておきましょう。

ガベージコレクタは、すべてのプログラミング言語にいるわけではありません。
ガベージコレクタがいるプログラミング言語もあれば、いないプログラミング言語もあります。
例えば、Javaにはガベージコレクタがいます。
C++にはガベージコレクタがいません。

Javaのようにガベージコレクタがいるプログラミング言語で作ったプログラムの場合、実際にインスタンスが破棄されるタイミングはガベージコレクタ次第です。

例えば、Javaでクラス「Piyota」のインスタンス「p」を作ったとしましょう。
この時点でメモリ上にインスタンス「p」が乗っかります。


「デストラクタ」と「ファイナライザ」の違い1

インスタンス「p」にあれやこれやの処理をさせました。

そしてインスタンス「p」は用済みになりました。
「もう使わないよ!」状態です。

ところがどっこい、Javaにおいては、この使わなくなったインスタンス「p」を捨てることができません。
使わなくなっても、メモリ上には置きっぱなしにしておくしかないのです。


「デストラクタ」と「ファイナライザ」の違い2

邪魔ですよね?
もう使わないのにメモリ上にあっても仕方がありません。

ここで登場するのが、ガベージコレクタです。

ガベージコレクタさんは、ふらふらと巡回しています。


「デストラクタ」と「ファイナライザ」の違い3

そして、メモリ上に「あれ?これって、もう誰も使っていないじゃん」なものを見つけたら回収していってくれるのです。


「デストラクタ」と「ファイナライザ」の違い4

つまり、Javaにおいては、ガベージコレクタさんが回収していってくれた時点で、インスタンスが破棄されます。
インスタンス「p」がメモリ上から消えるのは、ガベージコレクタさんが回収してくれたときなのです。

ガベージコレクタがいるプログラミング言語で作ったプログラムの場合、インスタンスが破棄されるタイミングはガベージコレクタが回収してくれたとき

というのを覚えておいてください。


それぞれの用語の意味


用語意味
デストラクタオブジェクト指向のプログラミング言語で登場する用語で、(人間様の目から見て)インスタンスが破棄されたタイミングで実行されるメソッド
ファイナライザオブジェクト指向のプログラミング言語で登場する用語で、(ガベージコレクタの目から見て)インスタンスが破棄されたタイミングで実行されるメソッド

似ているところ


どちらも、クラス内に定義するメソッドです。インスタンスが破棄されたときに実行されます。


違うところ


実行されるタイミングが違います。
デストラクタは、インスタンスが「人間様の目から見て」破棄されたときに実行されるメソッドです。
それに対してファイナライザは、インスタンスが「ガベージコレクタの目から見て」破棄されたときに実行されます。


スポンサーリンク