垃圾收集器如何在引擎盖下工作以收集死对象?

how Garbage collector works under the hood to collect dead object?

我正在阅读有关垃圾收集的内容。正如我们所知,垃圾收集收集死对象并回收内存。 我的问题是,Collector 如何知道任何对象已死? 它使用什么数据结构来跟踪活动对象?

我正在研究这个,我发现,GC 实际上会跟踪活动对象,并标记它们。每个未标记的对象都被视为已死。我想,有一些叫做 object-tree 的东西用于此目的。但我不知道它是如何工作的。

这是我的问题清单。

我认为实际上垃圾收集的工作方式与您的理解相反。不是我们收集和跟踪死的东西,我们跟踪和收集活的对象和所有其他指定为垃圾的东西。

开发人员使用的每一项都以这种方式处理,包括 class 对象、静态变量,甚至代码本身。只要一个对象被引用,JVM 就认为它是活动的。一旦某个对象不再被引用并因此无法被应用程序代码访问,它就不再被 JVM 跟踪并被视为垃圾。

对象树是在节点处保存对象的树数据结构。

对象树是这样工作的:

  1. 它们必须有一个或多个根对象。
  2. 一旦所有这些根对象都可达,整个树就可达。
  3. 如果根不再可达,它们将被视为垃圾

我相信它是由 JVM 管理和维护的。

source

树只是内存堆和对象之间引用的概念视图。它不作为单独的实体存在。

而且它并不是真正的树,因为它可以包含循环,所以称它为图会更准确。在垃圾收集过程中,它以树状方式(广度优先或深度优先遍历)通过遵循引用并跳过已经访问过的引用来访问。

http://en.wikipedia.org/wiki/Tracing_garbage_collection