このJavaのコードはガベージコレクションがいつ起きるかに関するものですね。Javaでは、オブジェクトにもうアクセスできなくなった時点でガベージコレクションによってメモリが回収される可能性があります。このコードを見てみましょう。
1. public class Main {
2. public static void main(String[] args) {
3. Object a = new Object(); // aに新しいオブジェクトを割り当てる
4. Object b = new Object(); // bに新しいオブジェクトを割り当てる
5. Object c = a; // cはaが参照するオブジェクトを参照する
6. a = null; // aの参照をnullにする(aが参照していたオブジェクトはガベージ対象に)
7. b = null; // bの参照をnullにする(bが参照していたオブジェクトはガベージ対象に)
8. // more code
9. }
10. }
コードにコメントを付け加えた通りです。このコードによれば、行6でa
が参照していたオブジェクト、行7でb
が参照していたオブジェクトがガベージコレクションの対象になります。しかし、c
は行5でa
が参照していたオブジェクトを参照しており、行6と行7でa
とb
の参照がnullにされた後も、c
を通じてそのオブジェクトにアクセス可能です。
問題の選択肢は以下の通りです。
A. 3行目で作成したインスタンスだけが、ガベージコレクションの対象となる
B. 4行目で作成したインスタンスだけが、ガベージコレクションの対象となる
C. 3行目と4行目で作成したインスタンスが、ガベージコレクションの対象となる
D. ガベージコレクションの対象となるインスタンスは存在しない
正しい答えはBです。これは4行目で作成されたオブジェクト(b
によって参照されていたオブジェクト)が、行7でb
の参照を失っているためです。他方で、3行目で作成されたオブジェクトはc
によってまだ参照されているため、ガベージコレクションの対象にはなりません。
Top comments (0)