6章4

RMAG news

この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によってまだ参照されているため、ガベージコレクションの対象にはなりません。

Leave a Reply

Your email address will not be published. Required fields are marked *