【发布时间】:2018-11-12 13:16:01
【问题描述】:
假设Java程序中有以下四个对象:
- 主要
- 一个
- b
- c
依赖如下:
main ==> a ==> b ==> c
换句话说,main 使用 a,a 使用 b,b > 使用 c。
现在,对象 a 的值从对 b 的引用变为 null。这意味着没有对 b 的活动引用,使其可用于垃圾回收:
main ==> a =/=> b ==> c
现在会发生什么:
A) 通俗地说,b 可以随时被垃圾回收。我的假设是 c 只有在 b 被垃圾回收后才符合垃圾回收条件。
B) 但是,我想这可能是 JVM 可以以某种方式区分对 GC 合格对象和非 GC 合格对象的 c 引用,并因此标记 c 与 b 同时符合条件。
行为是由 Java 语言规范或任何 JVM 相关规范决定的吗?还是留给 JVM 实现来决定?
【问题讨论】:
-
垃圾收集器只关心
main和a仍然可以访问。其他的都是垃圾。尽管名称具有误导性,但垃圾收集器从不查看垃圾。
标签: java garbage-collection jvm