发布于2026-07-07 阅读(0)
扫一扫,手机访问
Shenandoah 之所以能实现并发流式整理和亚毫秒级停顿,关键在于它把“移动对象”和“更新引用”这两件事彻底拆开,而且全部放到并发阶段去干——它不会等所有线程都停下来再统一搬数据、改指针,而是让 GC 线程一边搬一边记,用户线程该跑跑,该访问访问,通过屏障自动跳转到新地址。

具体怎么做到的?从转发指针说起。
每个对象头里都嵌了一个 Brooks 转发指针(fwdptr),初始指向自己。一旦这个对象被选入回收集,GC 线程就在目标 Region 里复制一份新副本,然后原子更新原对象头中的 fwdptr,让它指向新地址。
传统整理必须 STW 扫全堆加全栈来修正所有旧地址引用,Shenandoah 则把引用更新拆成三块:
Shenandoah 的九个阶段里,只有四次亚毫秒级 STW(初始/最终标记、初始/最终引用更新),其余全部并发:
为了支持跨 Region 引用追踪,Shenandoah 用稀疏二维连接矩阵(Connection Matrix)代替 G1 的卡表(Remembered Set):
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8