世代和增量垃圾收集之间有什么区别?

Dam*_*ian 25 concurrency garbage-collection memory-management boehm-gc

我认为两者(分代和增量)是使垃圾收集暂停更快的不同方法.但是世代和增量之间有什么区别?他们是如何工作的?哪一个更适合实时软件/产生较少的长时间停顿?

此外,Boehm GC是其中之一吗?

And*_*rew 22

世代GC始终是增量式的,因为它不会在循环期间收集所有无法访问的对象.相反,增量GC不一定采用生成方案来决定要收集哪些不可到达的对象.

世代GC将无法到达的对象划分为不同的集合,大致根据他们的最后用途 - 他们的年龄,可以这么说.基本理论是最近创建的对象很快就会无法访问.因此,在早期阶段收集具有"年轻"物体的装置.

可以用上面的世代方案实现增量GC ,但是可以采用不同的方法来决定应该对哪个对象组进行扫描.

有关两种GC方法的更多信息,可以查看此维基百科页面并进一步向下查看.

根据Boehm的网站,他的GC是渐进的和世代的:

收集器使用标记扫描算法.它在操作系统下提供增量和世代集合,提供正确的虚拟内存支持.

就实时环境而言,有几篇学术研究论文描述了垃圾收集的新方法和巧妙方法:


Ber*_*ann 17

一个增量垃圾收集器的任何垃圾收集器可以增量运行(这意味着它可以做一些工作,然后一些更多的工作,然后一些更多的工作),而不必运行,不会中断整个集合.这与旧的世界各地的垃圾收集器形成鲜明对比,例如标记和扫描没有任何其他代码能够处理对象.但需要明确的是:增量垃圾收集器实际上是否在同一对象上执行的其他代码并行运行并不重要,只要它是可中断的(例如,它必须区分脏对象和干净对象).

垃圾收集器区分旧,中和新对象.然后,它可以在新对象上复制GC(关键字"Eden"),标记和扫描旧对象以及介质对象上的不同可能性(取决于实现).根据实现,区分对象的方式可以是在内存中占用的区域,也可以是由标志占据的区域.分代GC的挑战是保持从一代到另一代的最新对象列表.

Boem是增量代际GC,如下所述:http://en.wikipedia.org/wiki/Boehm_garbage_collector