移动垃圾收集器的成本

Jon*_*rop 9 garbage-collection

移动垃圾收集器(例如分代收集器)会产生额外生成的代码,以便跨GC安全点存储和重新加载引用.与非移动收集器相比,有没有人量化过这种开销的性能成本?

我问,因为我有兴趣设计一个收集器,可以有效地回收短期值而无需移动它们.

Sim*_*low 6

移动与不移动的权衡是一个复杂的权衡.我不知道你提到的方面的任何特定研究 - 事实上,我不确定我是否完全理解它:准确的GC总是需要知道所有指针的位置,所以也许你在谈论保守的非移动GC?如果您对编译路径有足够的控制权以便能够进行准确的GC,那么我认为保守的GC是一个糟糕的选择.

影响移动与非移动GC性能的其他方面是:

  • 分配速度.非移动GC可能必须从空闲列表中分配,而coying GC可以使用bump-pointer分配.像Immix这样的混合方案试图在两者之间进行更好的权衡.

  • 位置和缓存行为.关于移动和非移动GC的研究很多; 参见GC参考书目.一般来说,压缩对缓存有好处,虽然复制GC通常是广度优先的,这是一个不好的选择(访问模式往往是深度优先)所以在这个领域有一堆研究试图重新排列对象以匹配访问模式.

我个人的意见是,为了支持真正的快速分配,你需要一个L2大小的托儿所,它有复制收集和凹凸指针分配.如果你做了其他任何事情,分配变得更加昂贵,这会扭曲很多事情:优化以减少分配变得更加重要,因此你最终会在那里花费精力并使事情变得更加复杂.我宁愿让分配真的很便宜,然后不用担心.