GC Roots是垃圾回收的起点,包括栈帧局部变量、静态属性、常量、JNI引用和活跃线程,通过引用链遍历对象图判断可达性,不可达对象被回收,特殊引用类型影响回收时机。

Java垃圾回收时判断一个对象是否可达,主要依靠可达性分析算法(Reachability Analysis)。这个机制从一组称为“GC Roots”的对象开始,向下搜索引用链,所有能被直接或间接引用到的对象被视为可达,不会被回收;反之,无法被访问到的对象则被认为是不可达的,可以被垃圾回收器回收。
GC Roots 是一组必须活跃的对象,它们是垃圾回收器进行可达性分析的起点。常见的 GC Roots 包括:
垃圾回收器会从上述的 GC Roots 出发,沿着引用关系遍历整个对象图。这个过程类似于图的遍历(如深度优先或广度优先):
例如:一个局部变量引用对象 A,A 又引用对象 B,B 引用对象 C。只要这个局部变量还存在(属于活动栈帧),A、B、C 都是可达的,即使没有其他引用。
立即学习“Java免费学习笔记(深入)”;
有些对象虽然技术上不可达,但 JVM 会在真正回收前尝试一次自救 —— 通过 finalize() 方法。不过该机制已被废弃,不推荐依赖。
另外,像软引用(SoftReference)、弱引用(WeakReference)、虚引用(PhantomReference)等特殊引用类型会影响可达性判断:
基本上就这些。可达性分析是现代 JVM 垃圾回收的基础,它比简单的引用计数更准确,能有效处理循环引用的问题。理解 GC Roots 和引用链,对排查内存泄漏也很有帮助。
以上就是Java垃圾回收时如何判断一个对象是否可达的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号