JVM GC和未使用的引用

时间:2018-11-12 13:16:01

标签: java garbage-collection jvm

假设Java程序中有以下四个对象:

  • 主要
  • a
  • b
  • c

依赖关系如下:

主要 ==> 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实现来决定?

1 个答案:

答案 0 :(得分:0)

通过此链接,我相信选项B是正确的: https://www.dynatrace.com/resources/ebooks/javabook/how-garbage-collection-works/ 一旦无法从GC根目录访问 b c ,它们就可以同时被收集。