假设Java程序中有以下四个对象:
依赖关系如下:
主要 ==> a ==> b ==> c
换句话说, main 使用 a , a 使用 b , b 使用 c 。
现在,对象 a 的值从引用更改为 b 变为空。这意味着没有有效引用 b ,使其可用于垃圾回收:
主要 ==> a = / => b ==> c
现在会发生什么:
A)用通俗易懂的话来说,可以随时收集 b 垃圾。我的假设是,只有在 b 被垃圾收集后, c 才可用于收集gargabe。
B)但是,我认为这可能是JVM可以以某种方式区分对来自GC合格对象和非GC合格对象的 c 的引用,并因此标记为 c < / strong>与 b 同时具有资格。
该行为是否由Java语言规范或任何与JVM相关的规范确定?还是由JVM实现来决定?
答案 0 :(得分:0)
通过此链接,我相信选项B是正确的: https://www.dynatrace.com/resources/ebooks/javabook/how-garbage-collection-works/ 一旦无法从GC根目录访问 b 和 c ,它们就可以同时被收集。