You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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行执行后,没有对象可被垃圾回收。

逐行分析引用变化:

  1. 前三行new Test()一共创建了3个独立对象,暂时称它们为对象A(s1初始指向)、对象B(s2初始指向)、对象C(s3初始指向)。
  2. 执行s1 = s3:s1转而指向对象C,对象A失去所有引用,成为垃圾回收候选。
  3. 执行s3 = s2:s3转而指向对象B,此时对象C仍被s1引用,不会被回收。
  4. 执行第11行s1 = s2:s1也转而指向对象B,此时对象C失去所有引用,加上之前的对象A,一共2个对象没有任何引用指向它们,符合垃圾回收条件。

正确答案是选项B,你的初步判断是对的。

内容的提问来源于stack exchange,提问作者ProteinShakes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:02:03