首页 > 解决方案 > 为什么标记压缩比标记复制慢?

问题描述

有一种说法,mark-compact 比 mark-copy 慢。但为什么?由于两种算法都需要移动活体。

标签: garbage-collectionjvm

解决方案


就像与垃圾收集有关的任何事情一样,它很复杂。

直观的推理是,mark compact 需要对所有对象(可达和不可达)进行额外的传递,以找到需要压缩的可达对象。此外,与从空间到空间的复制相比,在压缩期间修复对象中的指针(通常)需要更多的工作。(或者如果你不压缩,你会在其他领域支付性能损失。)

然而,在“垃圾收集:自动动态内存管理算法”中,Jones 和 Lins 提出了一个理论分析,表明标记扫描与单代复制收集器的相对效率取决于应用程序的“驻留”(r);即实时数据与堆大小的比率。超过一定的驻留时间 r *,标记扫描效率更高。

(请注意,r *将小于 0.5。单代复制收集器仅适用于 r 小于 0.5。)

如果你真的想了解,我建议你买这本书。或者更好的是,Jones、Hosking 和 Moss 撰写的最近的“垃圾收集手册:自动内存管理的艺术”


推荐阅读