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

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.xdnf.cn/news/4258.html

相关文章:

  • debuginfo详解
  • Python基本语法(类和实例)
  • 【RocketMQ 高可用】- 从节点同步偏移量源码解析
  • 计算机体系结构 第九章 (附带移数网络直径证明和取值情况)
  • 刷leetcodehot100返航版--哈希表5/5、5/6
  • Java抽象类与接口详解
  • 【项目】基于ArkTS的网吧会员应用开发(1)
  • 访问计划(C++)
  • BC9 printf的返回值
  • 学习路线(工业自动化软件架构)
  • Imagine Explainers:AI × 可视化 × 趣味讲解,让复杂变简单
  • 1. 设计哲学与核心价值
  • C/C++滑动窗口算法深度解析与实战指南
  • 2025年第十六届蓝桥杯省赛JavaB组真题
  • 【RocketMQ Broker 相关源码】-注册 broker 信息到所有的 NameServer
  • gcc/g++用法摘记
  • torch.nn.Sequential() and torch.nn.ModuleList()
  • 用输入输出变量根据超稳定性理论设计模型参考自适应系统
  • 迭代器模式
  • map和set的设计以及红黑树的设计
  • 英伟达语音识别模型论文速读:Fast Conformer
  • 学习黑客Nmap 实战
  • Java学习手册:Spring 多数据源配置与管理
  • 信息系统项目管理工程师备考计算类真题讲解十二
  • 破局者手册 Ⅰ:测试开发核心基础,解锁未来测试密钥!
  • 【NLP】27. 语言模型训练以及模型选择:从预训练到下游任务
  • RAG知识库只是表面简单!
  • Kubernetes排错(七)-节点排错
  • 除了java.nio.file.StandardCopyOption,还有哪些类可以实现文件的复制和移动?
  • C++动态库和静态库的生成和使用