Memory management 什么';分代垃圾收集和增量垃圾收集之间的区别是什么?
我认为(分代和增量)都是加快垃圾收集暂停的不同方法。但代际和增量之间有什么区别?它们是如何工作的?哪一个更适合实时软件/产生更少的长暂停Memory management 什么';分代垃圾收集和增量垃圾收集之间的区别是什么?,memory-management,concurrency,garbage-collection,boehm-gc,Memory Management,Concurrency,Garbage Collection,Boehm Gc,我认为(分代和增量)都是加快垃圾收集暂停的不同方法。但代际和增量之间有什么区别?它们是如何工作的?哪一个更适合实时软件/产生更少的长暂停 此外,Boehm GC是其中的任何一种?一代GC始终是增量的,因为它不会在一个周期内收集所有无法访问的对象。相反,增量GC不一定采用生成方案来决定收集或不收集哪些不可访问的对象 分代GC将无法访问的对象划分为不同的集合,大致根据它们最后的用途——可以说是它们的年龄。基本理论是,最近创建的对象将很快变得无法访问。因此,在早期阶段收集包含“年轻”对象的集合 增量G
此外,Boehm GC是其中的任何一种?一代GC始终是增量的,因为它不会在一个周期内收集所有无法访问的对象。相反,增量GC不一定采用生成方案来决定收集或不收集哪些不可访问的对象 分代GC将无法访问的对象划分为不同的集合,大致根据它们最后的用途——可以说是它们的年龄。基本理论是,最近创建的对象将很快变得无法访问。因此,在早期阶段收集包含“年轻”对象的集合 增量GC可以使用上述生成方案实现,但是可以使用不同的方法来决定应该扫描哪一组对象 我们可以查看并进一步向下查看,以获得有关这两种GC方法的更多信息 根据Boehm的网站,他的GC是增量的和分代的: 收集器使用标记扫描 算法。它提供增量和 下的代收 提供 正确的虚拟内存支持 就实时环境而言,有几篇学术研究论文描述了新的、巧妙的垃圾收集方法:
- 对差异有很好的解释
一些跟踪垃圾收集算法可以在中间暂停 一个收集周期,而变异体继续进行,而不会以 数据不一致。此类收集器可以增量操作,并且 适合在交互式系统中使用
原始垃圾收集器(1),一旦开始收集循环, 要么完成任务,要么放弃目前为止的所有工作。这是 通常是适当的限制,但当系统 必须保证响应时间;例如,在具有用户的系统中 实时硬件控制系统中的接口和接口。此类系统 可能会使用增量垃圾收集,以便 处理和垃圾收集可以在 平行,没有浪费的努力 分代垃圾收集是跟踪 利用世代假设。收集对象 几代人在一起。新对象以最年轻或最年轻的方式分配 如果他们能活下来,就可以晋升到上一代。 旧代中的对象被谴责的频率较低,从而节省了CPU 时间 通常情况下,对象很少引用较年轻的对象。 因此,一代中的对象通常很少引用对象 年轻一代的物品。这意味着扫描旧的 在收集年轻一代的过程中,几代人可以 通过记忆集更有效地完成 在一些纯函数式语言中(即,没有更新),所有 引用在时间上是向后的,在这种情况下,记住的集合是 不必要Boehm Demers Weiser有一个增量模式,您可以通过调用
GC\u enable\u incremental
来启用该模式。参见年轻一代被分为《到太空》、《从太空》和《伊甸园》。分配在从空间和伊甸园中进行,从空间和伊甸园都由集合复制到空间;不同的是,伊甸园被彻底清除了。有关更多信息,请查看此处并在页面中搜索Eden: