垃圾收集器如何在引擎盖下工作以收集死对象?
how Garbage collector works under the hood to collect dead object?
我正在阅读有关垃圾收集的内容。正如我们所知,垃圾收集收集死对象并回收内存。
我的问题是,Collector 如何知道任何对象已死?
它使用什么数据结构来跟踪活动对象?
我正在研究这个,我发现,GC 实际上会跟踪活动对象,并标记它们。每个未标记的对象都被视为已死。我想,有一些叫做 object-tree
的东西用于此目的。但我不知道它是如何工作的。
这是我的问题清单。
- 什么是对象树?
- 它是如何工作的?当我们使用
new
关键字创建任何对象时,它如何影响 object-tree
?
- 谁维护这棵树? jvm、GC,或者这就是对象存储在堆中的方式?
我认为实际上垃圾收集的工作方式与您的理解相反。不是我们收集和跟踪死的东西,我们跟踪和收集活的对象和所有其他指定为垃圾的东西。
开发人员使用的每一项都以这种方式处理,包括 class 对象、静态变量,甚至代码本身。只要一个对象被引用,JVM 就认为它是活动的。一旦某个对象不再被引用并因此无法被应用程序代码访问,它就不再被 JVM 跟踪并被视为垃圾。
对象树是在节点处保存对象的树数据结构。
对象树是这样工作的:
- 它们必须有一个或多个根对象。
- 一旦所有这些根对象都可达,整个树就可达。
- 如果根不再可达,它们将被视为垃圾
我相信它是由 JVM 管理和维护的。
树只是内存堆和对象之间引用的概念视图。它不作为单独的实体存在。
而且它并不是真正的树,因为它可以包含循环,所以称它为图会更准确。在垃圾收集过程中,它以树状方式(广度优先或深度优先遍历)通过遵循引用并跳过已经访问过的引用来访问。
我正在阅读有关垃圾收集的内容。正如我们所知,垃圾收集收集死对象并回收内存。 我的问题是,Collector 如何知道任何对象已死? 它使用什么数据结构来跟踪活动对象?
我正在研究这个,我发现,GC 实际上会跟踪活动对象,并标记它们。每个未标记的对象都被视为已死。我想,有一些叫做 object-tree
的东西用于此目的。但我不知道它是如何工作的。
这是我的问题清单。
- 什么是对象树?
- 它是如何工作的?当我们使用
new
关键字创建任何对象时,它如何影响object-tree
? - 谁维护这棵树? jvm、GC,或者这就是对象存储在堆中的方式?
我认为实际上垃圾收集的工作方式与您的理解相反。不是我们收集和跟踪死的东西,我们跟踪和收集活的对象和所有其他指定为垃圾的东西。
开发人员使用的每一项都以这种方式处理,包括 class 对象、静态变量,甚至代码本身。只要一个对象被引用,JVM 就认为它是活动的。一旦某个对象不再被引用并因此无法被应用程序代码访问,它就不再被 JVM 跟踪并被视为垃圾。
对象树是在节点处保存对象的树数据结构。
对象树是这样工作的:
- 它们必须有一个或多个根对象。
- 一旦所有这些根对象都可达,整个树就可达。
- 如果根不再可达,它们将被视为垃圾
我相信它是由 JVM 管理和维护的。
树只是内存堆和对象之间引用的概念视图。它不作为单独的实体存在。
而且它并不是真正的树,因为它可以包含循环,所以称它为图会更准确。在垃圾收集过程中,它以树状方式(广度优先或深度优先遍历)通过遵循引用并跳过已经访问过的引用来访问。