当前位置: 首页 > news >正文

java类=null的回收

在Java(或类似使用垃圾回收的语言)中,当你执行 a = null 后,对象 B() 是否会被回收取决于是否还有其他引用指向它。具体分析如下:

关键点:

  1. 引用链分析

    • 初始时:a 引用了 A 实例,A 的属性 c 引用了 B 实例。

    • 执行 a = null 后:

      • a 不再引用 A 实例。

      • 如果 A 实例没有被其他对象引用(即从根对象如静态变量、活动线程栈等不可达),则 A 实例和它的属性 c(即 B 实例)都会成为垃圾回收的候选对象。

  2. 是否回收 B()

    • 如果 B 实例仅通过 A.c 被引用,且 A 实例本身不可达,那么 B 会被一并回收。

    • 如果 B 实例还被其他对象引用(例如全局变量、其他对象的属性等),则它不会被回收。 

class A {Object c;void createB() {this.c = new B(); // B实例被A.c引用}
}// 场景1:仅A引用B
A a = new A();
a.createB();
a = null; // A和B均可被回收(如果没有其他引用)// 场景2:B被其他对象引用
A a = new A();
a.createB();
Object otherRef = a.c; // 其他引用指向B
a = null; // A可被回收,但B不会被回收(因为otherRef仍引用它)


 

总结:

  • B() 会被回收的条件A 实例和 B 实例都不可达(即没有任何引用链能从根对象访问到它们)。

  • B() 不会被回收的条件:存在其他引用指向 B

垃圾回收器通过可达性分析(Reachability Analysis)判断对象是否存活,与对象之间的赋值关系无关。

相关文章:

  • PostgreSQL 的 pg_ls_waldir 函数
  • Scala day6(Class,field,Single Object)
  • 【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)
  • 学习路线(嵌入式软件)
  • 【C/C++】无锁编程——compare_exchange_strong
  • LeetCode 热题 100 46. 全排列
  • 为React组件库引入自动化测试:从零到完善的实践之路
  • 【CF】Day51——Codeforces Round 963 (Div. 2) CD
  • 【AI学习】DeepSeek-R1是如何训练的?
  • 我的世界Minecraft游戏服务器搭建教程:腾讯云Java版
  • 学习黑客Nmap 原理
  • 时间同步服务核心知识笔记:原理、配置
  • 【信息系统项目管理师-论文真题】2006下半年论文详解(包括解题思路和写作要点)
  • C# 检查某个点是否存在于圆扇区内(Check whether a point exists in circle sector or not)
  • 五大神经网络开发实战:从入门到企业级部署
  • 【数据结构与算法】同余计算 哈希表与前缀和问题特征和模板化思路
  • 滚珠螺杆的精度如何保持?
  • Nacos源码—3.Nacos集群高可用分析二
  • Vue中的过滤器参数:灵活处理文本格式化
  • Docker 使用下 (二)
  • 巴菲特股东大会4.5万字问答实录:股神60年穿越牛熊的最新心得和人生思考
  • 击败老对手韩国队夺冠!国羽第14次问鼎苏迪曼杯创历史
  • 酒店民宿一房难求,湖北宣恩文旅局工作人员腾出家中空房给游客救急
  • 客流持续高位运行,长三角铁路计划增开153列旅客列车
  • 准80后遵义市自然资源局局长陈清松任怀仁市委副书记、代市长
  • 《水饺皇后》:命运如刀,她以饺子还击