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

为何将arr2d设为null后垃圾回收的对象数量为4?

为什么将arr2d设为null后有4个对象被垃圾回收

要搞清楚这个问题,核心是梳理对象的引用链:Java的垃圾回收只会回收完全失去可达引用的对象,你需要逐个排查代码中所有通过new创建的实例,看在arr2d = null之后,哪些对象再也没有任何变量或其他对象能引用到它们。

对应答案为4的典型场景是:
假设arr2d是一个二维数组,它的结构满足以下条件:

  • 外层数组包含2个一维数组,每个一维数组中存储了2个仅被当前一维数组引用的对象(比如new Integer(1)这类没有其他外部引用的包装类/自定义类实例)。
  • 这两个一维数组没有被除arr2d之外的任何变量引用。

当执行arr2d = null后,原本通过arr2d建立的引用链被完全切断:四个内部的包装类/自定义类实例失去了所有可达引用,因此会被垃圾回收。(如果题目默认不统计数组对象本身,就会得到4这个答案;若统计数组对象,总数会更多,但这类练习题通常聚焦业务对象的回收数量)

你可以按照这个思路,回头核对原题代码中的引用关系,就能明确为什么是4个对象被回收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:39:21