参照型とインスタンス化、それに関連するガベージコレクションについて理解を深めるための問題です。
問題
次のプログラムを実行した場合、最終的にヒープメモリに存在しない可能性のあるオブジェクトを選んでください。
class Animal {
String name;
Animal(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Animal tiger = new Animal("Tiger");
Animal lion = new Animal("Lion");
tiger = lion;
lion = null;
// Point A
}
}
選択肢
- A. Tiger
- B. Lion
- C. 両方ともヒープメモリに存在する
- D. どちらもヒープメモリに存在しない
答えと解説
回答を見る
答え
A. Tiger
解説
解説のポイント:
- 参照型とインスタンス化の仕組み理解
- ガベージコレクションの動作
プログラムでは、まずAnimal
クラスのインスタンスを2つ作成しています。一つは”tiger”、もう一つは”lion”です。
次にtiger
の参照をlion
の参照に置き換えています。この時点で、もともとtiger
が指していた”Tiger”というインスタンスは他に参照されていないため、ガベージコレクションの対象になります。
その後、lion
変数にnull
を代入することで、”Lion”というインスタンスも他に参照されなくなり、こちらもガベージコレクションの対象となります。
最終的なプログラム内でガベージコレクションされるまで、”Tiger”のオブジェクトはヒープメモリに残っていません。