当前位置: 首页 > 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)判断对象是否存活,与对象之间的赋值关系无关。

http://www.dtcms.com/a/173004.html

相关文章:

  • 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 使用下 (二)
  • 知识图谱 + 大语言模型:打造更聪明、更可靠的AI大脑 —— 探索 GraphRAG 中文优化与可视化实践
  • VirtualBox调整虚拟机内存和CPU
  • 数据库的原子事务
  • 阿里云物联网平台--云产品流传
  • Qt6.8中进行PDF文件读取和编辑
  • 【Java学习笔记】包
  • LeetCode 0790.多米诺和托米诺平铺:难想条件的简单动态规划
  • 实验-数字电路设计2-复用器和七段数码管(数字逻辑)
  • 设计模式每日硬核训练 Day 18:备忘录模式(Memento Pattern)完整讲解与实战应用
  • Python基本语法(类和实例)