G1收集器的GC Root跟Root RegionScan 以及RememberSet作用

扛枪蚂蚁 2019-06-15 08:04:18
GC Root的作用是Root Scan,根扫描应该能扫描到所有的对象,这些对象分布在新老代这个我能理解
1 G1 初始化标记后为什么要弄一个Root RegionScan呢,网上的资料不是特别的理解

2 RememberSet
RememberSet的作用是维护跨分区的引用,RootScan本身就能扫描到所有的分区引用,为什么还要用RememberSet呢,
小编查了很多资料都没有靠谱的解释,深入理解JVM里也没有合理的解释,只是几句话就带过了,大佬们有思考过这个问题么。
有一篇文章倒是稍微描述了下,说是年轻带代回收的时候不需要去扫描老年代,使用RememberSet就可以不去扫描老年代,将Rset中维护的
对象加入Root对象进行scan
小编的疑惑是
从GC ROOT对象出发的话深度搜索到老年代的对象怎么处理,是直接跳过不进行标记,本次scan中断,然后从Rset中找到老年代的对象去进行追踪?
希望有大佬能解惑
...全文
506 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
luobiao320 2019-07-30
  • 打赏
  • 举报
回复 2
我的理解是: 在进行minor gc时,由于只对堆中新生代的对象进行gc,所以通过OopMap中找出栈上gc root时过滤掉引用老年代对象的gc root。 但有可能存在老年代对象引用新生代对象的情况,故在新生代边上专门开辟一块空间记录下来,这就是 RememberedSet 。 所以“新生代的 GC Roots ” + “ RememberedSet 存储的内容”,才是新生代收集时真正的 GC Roots

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧