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

我认为两者(分代和增量)是使垃圾收集暂停更快的不同方法。但是世代和增量之间有什么区别?他们是如何工作的?哪一个更适合实时软件/产生较少的长时间停顿? 此外,Boehm GC是其中之一吗?     
已邀请:
世代GC始终是增量式的,因为它不会在循环期间收集所有无法访问的对象。相反,增量GC不一定采用生成方案来决定要收集哪些不可到达的对象。 世代GC将无法到达的对象划分为不同的集合,大致根据他们的最后用途 - 他们的年龄,可以这么说。基本理论是最近创建的对象很快就会无法访问。因此,在早期阶段收集具有“年轻”物体的装置。 可以用上面的世代方案实现增量GC,但是可以采用不同的方法来决定应该对哪个对象组进行扫描。 有关两种GC方法的更多信息,可以查看此维基百科页面并进一步向下查看。 根据Boehm的网站,他的GC是渐进的和世代的:   收集器使用标记扫描   算法。它提供增量和   世代收藏   提供的操作系统   正确的虚拟内存支持。 就实时环境而言,有几篇学术研究论文描述了垃圾收集的新方法和巧妙方法: 非阻塞实时垃圾收集 IBM的实时垃圾收集对差异有很好的解释。     
增量垃圾收集器是可以递增运行的任何垃圾收集器(意味着它可以执行一些工作,然后执行更多工作,然后执行更多工作),而不必不间断地运行整个集合。这与旧的世界末日垃圾收集者形成鲜明对比。标记和扫描没有任何其他代码能够处理对象。但需要明确的是:增量垃圾收集器实际上是否与在同一对象上执行的其他代码并行运行并不重要,只要它是可中断的(例如,它必须区分脏对象和干净对象)。 分代垃圾收集器区分旧,中和新对象。然后,它可以在新对象(关键字“Eden”)上复制GC,标记和扫描旧对象以及介质对象上的不同可能性(取决于实现)。根据实现,区分对象的方式可以是在内存中占用的区域,也可以是由标志占据的区域。分代GC的挑战是保持从一代到另一代的最新对象列表。 Boem是增量代际GC,如下所述:http://en.wikipedia.org/wiki/Boehm_garbage_collector     
http://www.memorymanagement.org/glossary/i.html#incremental.garbage.collection   一些跟踪垃圾收集算法可以在中间暂停   一个收集周期,而变异者继续,而没有结束   不一致的数据。这样的收集器可以递增地运行   适用于交互式系统。      原始垃圾收集器(1),一旦开始收集周期,   必须要么完成任务,要么放弃他们到目前为止的所有工作。这是   通常是一个适当的限制,但在系统时是不可接受的   必须保证响应时间;例如,在具有用户的系统中   接口和实时硬件控制系统。这样的系统   可能会使用增量垃圾收集,以便时间紧迫   处理和垃圾收集可以有效地进行   平行,没有浪费精力。 http://www.memorymanagement.org/glossary/g.html#generational.garbage.collection   分代垃圾收集正在跟踪垃圾收集   利用世代假设。收集对象   几代人在一起。新对象分配在最年轻的或   苗圃的产生,如果它们存活,就会被提升到老一代。   老一代中的对象受到较少的谴责,从而节省了CPU   时间。      对象通常很少引用较年轻的对象。   因此,一代中的对象通常几乎没有引用   年轻一代的物品。这意味着扫描旧   几代人在收集年轻一代的过程中都可以   通过记忆集更有效地完成。      在一些纯功能语言(即没有更新)中,所有   引用是及时的,在这种情况下,记忆集是   不必要。 Boehm-Demers-Weiser有一种增量模式,你可以通过调用ѭ0来启用它。见http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html     

要回复问题请先登录注册