Java 垃圾收集过程中的引用处理是什么

Java 垃圾收集过程中的引用处理是什么,java,reference,garbage-collection,g1gc,Java,Reference,Garbage Collection,G1gc,我正在阅读G1GC,在年轻的收集和并发标记周期步骤中都有称为“引用处理”和“引用Enq”的过程。这些过程到底是什么?那里会发生什么?引用处理是一个专门处理特殊引用对象(例如弱引用、终结器、JNI引用)的阶段 特别参考文献有两个重要方面 它们可能具有关于对象可达性的特殊语义(例如弱引用) 作为GC工作的结果,可能需要将引用对象添加到引用队列中 在正常GC阶段,引用对象是用于后处理的队列 “Ref-Proc”阶段在主GC阶段之后开始,所以知道哪些对象幸存了,哪些没有,所以可以应用引用语义 “Re

我正在阅读G1GC,在年轻的收集和并发标记周期步骤中都有称为“引用处理”和“引用Enq”的过程。这些过程到底是什么?那里会发生什么?

引用处理是一个专门处理特殊引用对象(例如弱引用、终结器、JNI引用)的阶段

特别参考文献有两个重要方面

  • 它们可能具有关于对象可达性的特殊语义(例如弱引用)
  • 作为GC工作的结果,可能需要将引用对象添加到引用队列中
在正常GC阶段,引用对象是用于后处理的队列

“Ref-Proc”阶段在主GC阶段之后开始,所以知道哪些对象幸存了,哪些没有,所以可以应用引用语义


“Ref Enq”是在之后完成的,用于将引用放入引用队列(引用队列是堆上的Java对象,通常用于实现由特殊引用启用的模式)

从“命名”中,我会猜测:第一个是关于“处理”新添加的引用,第二个是关于将引用放入(排队)特定的“列表”。我的错误是,我想问的是“处理”到底是什么,以及在那里发生了什么样的活动。如果我有更多的直觉,我应该已经写了答案;-)如:“[垃圾收集器]必须遍历所有活动引用,即强可访问对象,而所有未遇到的对象都是垃圾清除。因此,在遍历过程中遇到弱引用时,它不会遍历引用对象,但请记住引用对象。一旦完成遍历,它将遍历所有遇到的引用对象和查看引用对象是否已通过其他路径标记为可访问。如果未标记,则清除引用对象并链接以进行排队。“排队”意味着引用对象可通过其他路径访问,因此积极使用该功能的应用程序可以了解某个对象已变得不可访问。垃圾收集器不处理队列。