首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shenandoah垃圾收集器-在应用程序更改对象状态之前,重定向指针如何在收集了两次的区域中工作?

Shenandoah垃圾收集器-在应用程序更改对象状态之前,重定向指针如何在收集了两次的区域中工作?
EN

Stack Overflow用户
提问于 2019-12-27 17:45:16
回答 1查看 79关注 0票数 1

根据article的说法,Shenandoah GC的工作是添加新的指针来告诉对象移动到了哪里。

比方说:

代码语言:javascript
复制
region_A  redirection_pointer 
ObjectA   12345

那么GC正在将这个对象移动到某个地方:

代码语言:javascript
复制
region_A  redirection_pointer 
(no object)   12345

一段时间后,GC会将新对象添加到此区域:

代码语言:javascript
复制
region_A  redirection_pointer 
ObjectB   11111

刚才app想用ObjectA做点什么,但是它没有合适的对象和重定向指针。

这是如何工作的?

EN

回答 1

Stack Overflow用户

发布于 2020-01-20 15:14:37

我认为这在谢南多会谈中被多次提及。请参阅“并发复制”小节here。这是“老的”Shenandoah (俗称1.0)。有关更新的Shenandoah,请参阅here

从你问问题的方式来看,我猜主要的误解是认为对象被复制的区域在移动后立即被回收。它实际上是在所有引用更新后被回收的,这意味着每个堆引用都知道ObjectA现在在哪里。因此,您永远不会在需要来自旧区域的转发指针的情况下运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59498804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档