对象类中的Brooks指针

Dif*_*ffy 6 java android

在Object.java代码中的Android SDK 21中,我遇到了"Brooks Pointer"一词.我在这里阅读了这篇文章,但我没有清楚地了解它.在帖子中,它被描述为对象本身在堆中的引用.但它的用途是什么?
它将如何帮助垃圾收集和对象疏散?

Vin*_*igh 7

Roman的Blog解释了他的GC实现是如何工作的.

介绍

概观

Brooks Forwarding Pointers

这是Shenandoah GC中的一项新功能,它允许应用程序线程在压缩过程中移动时将应用程序线程与堆中的对象进行交互(将引用的对象移动到更好的位置),从而无需"停止世界"

在此之前,需要在GC移动时阻止对引用对象的访问,以确保没有人可以访问该对象,直到它位于新位置.如果您尝试访问该对象,但GC已将其移动,则会出现问题.这就是为什么我们在GC的时候有"停止世界"的原因(为了安全措施,不允许任何线程访问堆中的对象).当对象移动时,对象图被认为是不一致的,因此最好阻止对它的访问.

使用这个新系统,转发指针(向下滚动到转发指针)放在引用对象所在的位置,引用该对象的新位置.现在我们不必担心如果GC要移动它就不存在该对象,因为我们仍然可以通过转发指针引用它.我们现在可以在GC移动时访问该对象,这意味着我们不再需要在压缩过程中阻止访问.

我所指的"转发指针"是Brooks Pointer