garbage-collection - 为什么标记压缩比标记复制慢?
问题描述
有一种说法,mark-compact 比 mark-copy 慢。但为什么?由于两种算法都需要移动活体。
解决方案
就像与垃圾收集有关的任何事情一样,它很复杂。
直观的推理是,mark compact 需要对所有对象(可达和不可达)进行额外的传递,以找到需要压缩的可达对象。此外,与从空间到空间的复制相比,在压缩期间修复对象中的指针(通常)需要更多的工作。(或者如果你不压缩,你会在其他领域支付性能损失。)
然而,在“垃圾收集:自动动态内存管理算法”中,Jones 和 Lins 提出了一个理论分析,表明标记扫描与单代复制收集器的相对效率取决于应用程序的“驻留”(r);即实时数据与堆大小的比率。超过一定的驻留时间 r *,标记扫描效率更高。
(请注意,r *将小于 0.5。单代复制收集器仅适用于 r 小于 0.5。)
如果你真的想了解,我建议你买这本书。或者更好的是,Jones、Hosking 和 Moss 撰写的最近的“垃圾收集手册:自动内存管理的艺术”。
推荐阅读
- google-cloud-bigtable - 使用 bigtable cbt 中的列值进行搜索
- arrays - \0 使用循环初始化 char 数组时
- ios - Alamofire 5 的刷新令牌问题 AuthenticationInterceptor
- javascript - 在 evo 日历中设置当前日期的默认日期
- python - 导入代码在本地计算机上工作正常,但在 aws 上出错
- c++ - 运行 cmake 时,`No CMAKE_ASM_COMPILER found` 错误
- laravel - Laravel Lighthouse 限制突变场
- jquery - 需要一个不工作的 JQuery 函数
- autodesk-forge - Autodesk.Viewing.UI.DataTable 压垮其他 DataTable
- python - 如何在python中选择不同比例的随机数?