今日もJava Silver試験に向けた練習問題を解きましょう。
問題
次のプログラムを実行した際、ガベージコレクションによってメモリから解放されるインスタンスはどれでしょうか?正しい選択肢を選んでください。
class Car {
String name;
Car(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Car car1 = new Car("Toyota");
Car car2 = new Car("Honda");
car1 = car2;
Car car3 = null;
}
}
選択肢
- A. car1の”Toyota”
- B. car2の”Honda”
- C. car3
- D. どれにもガベージコレクションは起こらない
答えと解説
回答を見る
答え
A. car1の”Toyota”
解説
解説のポイント:
- オブジェクトの参照解除
- ガベージコレクションの仕組み
- メモリ管理
まず、「car1 = car2;」という代入文によって、car1がもともと指していた"Toyota"
のインスタンスへの参照が解除されます。
これにより、オブジェクト"Toyota"
を指す他の参照がなければ、このインスタンスはガベージコレクションの対象となります。
ガベージコレクションは、プログラムの実行中に不要になったオブジェクトのメモリを解放するためのプロセスです。
また、Car car3 = null;
に関しては、car3は最初からどのインスタンスも指していないため、ガベージコレクションの対象とはなりません。
ポイントとして、オブジェクトはそれを指す参照が存在しない場合にメモリから解放される可能性があります。
開発者は通常、ガベージコレクションの詳細な挙動を把握する必要はありませんが、どのような場合にオブジェクトが解放されるのかを理解しておくことはメモリ管理の基本です。