我正在读垃圾收集。众所周知,垃圾收集会收集死对象并回收内存。 我的问题是,Collector如何知道任何对象已经死了? 它用于跟踪活动对象的数据结构是什么?
我正在研究这个,我发现,GC实际上跟踪了活动对象并标记了它们。每个未标记的对象都被视为死亡。我猜,有一些名为object-tree
的东西用于此目的。但它的作用我不知道。
以下是我的问题清单。
new
关键字创建任何对象时,它如何影响object-tree
? 答案 0 :(得分:1)
实际上垃圾收集我认为与你的理解相反。我们不会收集和追踪死亡的东西,我们跟踪和收集活动对象以及其他指定为垃圾的东西。
开发人员使用的每个项都以这种方式处理,包括类对象,静态变量,甚至代码本身。只要引用了一个对象,JVM就会认为它是活动的。一旦对象不再被引用,因此应用程序代码无法访问它,它就不再被JVM跟踪并被视为垃圾。
对象树是在节点处保存对象的树数据结构。
对象树的工作原理如下:
我相信它是由JVM管理和维护的。
答案 1 :(得分:1)
树只是内存堆和对象之间引用的概念视图。它不作为单独的实体存在。
它并不是真正的树,因为它可以包含循环,因此将其称为图表会更准确。在垃圾收集过程中,它会以树状方式(广度优先或深度优先遍历)通过跟踪引用和跳过已访问过的方式进行访问。