質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

2662閲覧

ファイナライザ(ズ) デストラクタ ガベージコレクション 違いは具体的に教えてください。

King_of_Flies

総合スコア382

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/10/25 00:57

編集2017/10/25 01:04

お疲れ様です。

参照元PDF

https://software.fujitsu.com/jp/technical/interstage/apserver/guide/pdf/Finalizer-GC.pdf

上記PDFファイルに一通り目を通した後で、
結局何がどう違うのか理解できませんでした。
以下では、PDF内の引用をしています。

  • ファイナライザ

世代別 GC を実装している Java VM においては、ファイナライザを持つオブジェクトが Old 領域に存
在することがあります。Old 領域に存在するオブジェクトは、ファイナライザ到達可能になっても、フル
GC が実行されるまで、ファイナライズ可能になりません。そのため、New 領域に対する GC が何度実行
されても、オブジェクトはファイナライズ可能になりません。つまり、ファイナライザは実行されません。
また、GC 処理の最中、ファイナライザは処理されません。そのため、ファイナライズ待ちリストに大
量のオブジェクトが存在する状態で GC が頻発した場合、いつまでもファイナライザが処理されないこと
もあり得ます。

  • ガベージコレクション

Java VM がオブジェクトを管理するメモリ領
域(Java ヒープ領域)がいっぱいになると、Java VM は、GC 処理を実行します。GC 処理では、不要に
なったオブジェクトのメモリを開放し、ほかのオブジェクトによってメモリを使用できるようにします。

  • デストラクタ

C++言語のデストラクタは、スタック上に作成されたオブジェクトが自動的に破棄される場合や、メモ
リ上に作成されたオブジェクトが delete 演算子によって明示的に破棄される場合に呼び出されます。つま
り、デストラクタを呼び出すタイミングをアプリケーションで制御可能です。


調べてみたところどれも”同じ意味”ではなく、
しっかりとした違いがあるようですが、密接な関わり合いがあるのは確かなようです。(あるいは似ている)

ただこのあたりの説明をPDFで読んだところでピンとくる物はありませんでした。

一応私なりにまとめると、
ファイナライザは容易に使わないこと。
GCの連続によってファイナライザ実行がされない場合がある。

GCはヒープ領域とやらが満タンになると、自動的に不要となったオブジェクトの解放を行う。

デストラクタはアプリケーションで制御可能

ってくらいです。

違いを明確に理解して使用している方は、
どのような点を要点として抑えていますか。

よろしくお願いします。

P.S.
teratailロゴがハロウィン仕様になっていますね。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ややこしいことに、言語によって意味合いが違う部分もあります(もっとも、ファイナライザとデストラクタが両方ある言語は、ぱっと思いついた範囲内ではC++/CLIぐらいしかないです)。

(本来の)デストラクタ

オブジェクトを破棄する際に、必ず実行されるメソッド。インスタンスの生成や破棄を自前で管理するC++や、参照カウントが基本になっているPHPなどに存在します(もっとも、PHPで循環参照が起きた場合には、デストラクタのタイミングは不定となります)。

ファイナライザ

オブジェクトがガベージコレクタで回収される前に、実行される(かもしれない)メソッド。JavaやC#、Rubyなどにあるのはこちら(過去には、C#でも「デストラクタ」と呼んでいたようですが、状況としてはこちらに当たります)。Javaでは、実行せずにプログラムを終了してしまうこともありうるとのことです。ガベージコレクタの動き次第なので、いつ実行されるかは制御できません

ガベージコレクタ

不要になったメモリを解放する、言語内部などの仕組み。大きく分けると「参照カウント」といって、「使っている変数の数を数えておいて、0個になったら解放する」方法と、「マーク・アンド・スイープ」といって、「メモリ全体をチェックして不要なのを探す」方法があります。

投稿2017/10/25 01:15

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

全部例え話なので、正確な意味はそれぞれの単語を自身で調べてください。

ファイナライザ

ゴミ箱に入れるときにすること。ペットボトルからラベルを剥いだり、ガスボンベに穴を開けたりするような、「捨てるときにやらなければいけないこと」。

ガベージコレクション

「部屋汚くなってきたな。そろそろ掃除するか」で始める掃除のこと。たいていの場合それは自分でなく「カーチャン」とか「ロボ」任せにする。ガベージコレクタは「ガベージコレクションしてくれる人」。お掃除ロボのような存在。掃除方法には「世代別ガベージコレクション」とか「マーク・アンド・スイープ」とかがある。世代別ガベージコレクションは「ゴミっぽく見えるけどたまに使うもの」「すぐ要らなくなるゴミ」等を場所により分けて必要に応じて掃除する、「マーク・アンド・スイープ」は一旦「いるもの」に目印を付けて、目印のついてないものを一気に捨てる方法。

デストラクタ

ファイナライザとやることは同じ。ただし「タイミングをあなたがコントロールできるか」が違う。
デストラクタは掃除する人が「あなた」で、ファイナライザは「あなた」ではない誰かが「あなたのあずかり知らないところで勝手なタイミング」で行われること。例えばお掃除ロボがあなたの留守中にゴミ箱に捨てるのはファイナライザ、あなたが「これもういらないや」でゴミ箱に捨てるときにやるのがデストラクタ。

投稿2017/10/25 01:15

編集2017/10/25 01:26
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

King_of_Flies

2017/10/25 01:20

余談ですが、ガベージコレクションという言い回しと、ガベージコレクタという言い回しに違いはありますか?
maisumakun

2017/10/25 01:25

「ガベージコレクション」は動作で、「ガベージコレクタ」はそれを行うコードです。
King_of_Flies

2017/10/25 01:27

maisumakunさん> ありがとうございます。
King_of_Flies

2017/10/25 01:29

masaya_ohashiさん> ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問