对象类中的Brooks指针

时间:2015-05-21 16:26:56

标签: java android

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

1 个答案:

答案 0 :(得分:6)

罗马的博客解释了他的GC实施是如何运作的。

Intro

Overview

Brooks Forwarding Pointers

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

在此之前,需要在GC移动时阻止对引用对象的访问,以确保在对象进入其新位置之前无法访问该对象。如果您尝试访问该对象,但GC已将其移动,则会出现问题。这就是为什么我们有'停止世界'#34;当它到GC的时间(没有线程允许访问堆中的对象以进行安全措施)。当对象四处移动时,对象图被认为是不一致的,因此最好阻止对它的访问。

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

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