Java 对象类中的Brooks指针

Java 对象类中的Brooks指针,java,android,Java,Android,在Object.java代码中的Android SDK 21中,我遇到了术语“Brooks指针”。我读了这篇文章,但对它没有一个清晰的了解。在post中,它被描述为对堆中对象本身的引用。但是它有什么用呢? 它将如何帮助垃圾收集和对象疏散?Roman的博客解释了他的GC实现是如何工作的 这是Shenandoah GC中的一项新功能,允许应用程序线程在压缩(将引用对象移动到更好的位置)期间与堆中的对象进行交互,无需“停止世界” 在此之前,需要防止在GC移动被引用对象时访问这些对象,以确保在对象

在Object.java代码中的Android SDK 21中,我遇到了术语“Brooks指针”。我读了这篇文章,但对它没有一个清晰的了解。在post中,它被描述为对堆中对象本身的引用。但是它有什么用呢?

它将如何帮助垃圾收集和对象疏散?

Roman的博客解释了他的GC实现是如何工作的

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

在此之前,需要防止在GC移动被引用对象时访问这些对象,以确保在对象位于新位置之前,任何人都无法访问该对象。如果您尝试访问该对象,但GC已将其移动,则会出现问题。这就是为什么到了GC的时候我们要“停止世界”(为了安全起见,不允许线程访问堆中的对象)。当对象四处移动时,对象图被认为是不一致的,因此最好防止访问它

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


我指的“转发指针”是Brooks指针

转发指针是否在移动过程中始终使用对象的新地址进行更新?@Diffy发生疏散时,对象仅移动一次:从“从区域”到“到区域”。将转发指针放置在“从空间”中,以取代移动到“到空间”的对象。不需要不断更新转发指针。在他的博客中都提到了:)