基本的な質問で恐縮ですがGCについて教えてください。
例えば、シングルトンインスタンス内のhogemethodメソッドにてHashMapのインスタンスを
生成・使用した場合(以下の質問に続く)、
【質問】
hogemethodメソッドが終わればHashMapのインスタンスはスコープを外れるので、hogeMap = null;などしなくてもGC対象となり、そのうちGCされるのでしょうか?いやいや、hogeMap = null; することによりGC対象となり、そのうちGCされるのでしょうか?それとも、nullセットしようがしまいが、シングルトンのインスタンスが存在し続ける限りGC対象とはなってもGCされることは無いのでしょうか?
package hoge;
public class MySingleton {
private static MySingleton instance = new MySingleton();
private MySingleton() {}
public static MySingleton getInstance() {
return instance;
}
public void hogemethod() {
HashMap hogeMap = new HashMap();
hogeMap .put("りんご", "apple");
hogeMap .put("ぶどう", "grapes");
:
hogeMap = null; ←★hogeMap をGC対象にするためにはnull代入は必要なのか?
}
}
よろしくお願いします。
No.2
- 回答日時:
hogeMap は、hogemethod() のローカル変数なので、
hogeMap の持つ参照を他に渡すコードが無い限り、
メソッドの実行が終わった段階で GC に対象になるはずです。
#しかし、こういうソースが多いですよね。
#ソースの最後にローカル変数の null クリアコードがずらずらあると
#なんかぞっとします。
No.1ベストアンサー
- 回答日時:
変数の参照するオブジェクトは、使われなくなった時点でGC対象となります。
(※)使われなくなった時点とは即ち、メインスレッド・及びメインスレッドから派生した全てのサブスレッドから参照が無くなったら、という意味です。
hogeMapはローカル変数で、かつより広いスコープの変数に参照を渡しているわけでも無いので、
明示的にhogeMapにnullをセットすればその時点でhogeMapの保持するオブジェクトはGC対象となりますし、
明示的にnullをセットしなくてもhogemethodを抜けた時点でGC対象となります。
シングルトンとかは関係ありません。
従って、「★hogeMap をGC対象にするためにはnull代入は必要なのか?」に対する答えとしては、「必要ではない」となりますね。
※システムでプールしているオブジェクトなんかはどうなるかわかりませんが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- 化学 至急 ガスクロマトグラフィーについて教えていただきたいです。 試料溶液中のピリジン、フェノール、アセ 2 2022/07/05 12:31
- レトロゲーム 1990年4月2日から1991年4月1日の間に生まれました。 現在はゲームに興味ありませんが、 スー 2 2023/02/15 15:19
- R&B・ヒップホップ SHISEのそよ風という曲のイントロに使われているcreamって無料で使えるんですか? 1 2022/05/29 12:11
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- 化学 ガスクロマトグラフィーについてです。 試料溶液中のピリジン、フェノール、アセトフェノンの重量比および 1 2022/07/04 17:36
- レトロゲーム ゲーム機の世代が知りたいです。(現在のゲームには興味はないが、子どものころ持っていたゲーム機はこれ 3 2023/02/16 15:04
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
VB.NET getとsetの概念がわかり...
-
他のファイルの変数参照
-
生成したインスタンスを削除す...
-
非staticフィールドを参照でき...
-
VB.netで標準モジュールからフ...
-
変数の参照でエラーが出てしま...
-
ファイル読み込み/書き込み速度...
-
VB.NET Newしたものを変数に代...
-
フィールドでのnewとコンストラ...
-
フォームの存在をチェックする方法
-
整数の引数に列挙を使ったとき
-
インスタンスを同じ名前で作成...
-
文字列を日付に変換でParseExce...
-
SerialPort処理でInvokeメソッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
C# インスタンスの破棄
-
newしないインスタンス?実体化...
-
SQLを連続発行する時の正しい(?...
-
「インスタンス」の意味をわか...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
フォームの存在をチェックする方法
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
-
エクセル(複数インスタンス)...
-
C#「オブジェクト参照が必要で...
-
他のファイルの変数参照
おすすめ情報