Java垃圾回收对象数量问题:代码执行后可回收对象数是多少?
Java垃圾回收模拟题解析
先看题目给出的代码:
public class Test { public static void main(String[] args) { Test s1 = new Test(); Test s2 = new Test(); Test s3 = new Test(); s1 = s3; s3 = s2; s1 = s2; // 第11行 } }
题目选项:
- A. 第11行执行后,有3个对象可被垃圾回收。
- B. 第11行执行后,有2个对象可被垃圾回收。
- C. 第11行执行后,有1个对象可被垃圾回收。
- D. 第11行执行后,没有对象可被垃圾回收。
逐行分析引用变化:
- 前三行
new Test()一共创建了3个独立对象,暂时称它们为对象A(s1初始指向)、对象B(s2初始指向)、对象C(s3初始指向)。 - 执行
s1 = s3:s1转而指向对象C,对象A失去所有引用,成为垃圾回收候选。 - 执行
s3 = s2:s3转而指向对象B,此时对象C仍被s1引用,不会被回收。 - 执行第11行
s1 = s2:s1也转而指向对象B,此时对象C失去所有引用,加上之前的对象A,一共2个对象没有任何引用指向它们,符合垃圾回收条件。
正确答案是选项B,你的初步判断是对的。
内容的提问来源于stack exchange,提问作者ProteinShakes
相关产品推荐
相关产品推荐

