指针重定向严重损害空间局部性,导致l2缓存效率骤降:写操作跨缓存行、页及numa节点,预取失效,l2 miss rate升至常态3–5倍,带宽利用率不足15%;多核并发重定向引发高频缓存一致性开销,4核下l3 invalid请求占比达37%。

指针重定向破坏空间局部性,拖累L2缓存效率
整理阶段需批量更新所有存活对象的内部引用字段,这些字段在内存中高度离散:有的在栈帧里,有的嵌在不同对象的字段中,目标地址又随滑动策略动态分布。结果就是写操作跨缓存行、跨页、甚至跨NUMA节点——L2缓存无法形成有效预取,硬件预取器(如Intel DCU)对这类随机写完全不响应。实测显示,单次整理后L2 miss rate可飙升至常态的3–5倍,带宽利用率常低于15%,因每次只改8字节指针却要整行换入换出。
跨核写引发高频缓存一致性开销
多核并行执行重定向时,各核写入地址无序且互不重叠,极易让同一缓存行在多个私有L1/L2中反复处于Shared或Invalid状态。每次写都触发MESI协议的Invalidate广播,消耗互连带宽。在4核服务器上运行G1式整理器时,L3缓存的Invalid请求占比达37%,远高于应用负载常态(通常
伪共享与无效化放大延迟
即使对象本身对齐到缓存行边界,其引用字段仍常与相邻元数据(如GC标志位、锁状态)共存于同一行。重定向写入一个指针,会污染整行,导致其他核心正在读写的变量被意外无效化。这不仅增加Invalid消息数量,还迫使L2等待远端确认,尤其在跨NUMA写场景下,延迟进一步拉长。若启用转发指针(如Lisp 2算法),还需额外读取对象头,引入二次L2未命中,使写延迟成倍增长。
缺乏硬件协同支持,指令粒度太粗
当前x86/ARM处理器未提供面向GC重定向的缓存提示指令。普通store指令无“弱局部性写”语义,CPU一律按标准协议处理,无法跳过L2或标记为“低重用”。也没有类似CLWB的细粒度控制来刷写指针字段所在缓存行的子区域。这意味着每一次指针更新,都承受着与常规业务写同等的缓存开销——而它实际重用率极低,本质是“一次性写风暴”,与程序正常访存模式完全脱节。










