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

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

スポンサーリンク

予備知識


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

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

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

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

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


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

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

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

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


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

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

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

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


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

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


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

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

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

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


それぞれの用語の意味


用語意味
デストラクタ(人間様から見て)インスタンスが破棄されたタイミングで実行されるメソッド
ファイナライザ(ガベージコレクタから見て)インスタンスが破棄されたタイミングで実行されるメソッド

似ているところ


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


違うところ


実行されるタイミングが違います。
それぞれ

デストラクタ:インスタンスが人間様から見て破棄されたときに実行
ファイナライザ:インスタンスがガベージコレクタから見て破棄されたときに実行


されるメソッドです。


「デストラクタ」と「ファイナライザ」の違い5
スポンサーリンク
書籍画像065
書籍画像047


書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
サイバーセキュリティお嬢様と学ぶ 情報セキュリティの基本
クイズで学ぶUIデザイン ユーザビリティの基本が身につく50問