对垃圾收集算法感兴趣,最少停顿,愿意牺牲空间

时间:2012-11-03 03:46:12

标签: algorithm garbage-collection

我有兴趣设计一种用于进行音频合成的方案风格,但我非常关心在适应音频所需的低延迟时进行适当的垃圾收集。我想知道该领域的某个人是否能够指出我可能适合这种环境的垃圾收集算法。我正在查看实时垃圾收集,这似乎是有意义的,因为我想限制垃圾收集器所花费的时间,所以我不会在音频中暂停...虽然可能是一个收集器,只是“足够快”并且将其工作分配得足够好吗?我并不担心多线程/多处理,我绝对不担心为了实现这些目标而浪费大量空间。我追求可预测,简单,快速。

谢谢!

1 个答案:

答案 0 :(得分:1)

在类Unix操作系统的单进程设置中,我听说过一种有趣的方法。 (它是为Nickle实验性地实现的,但我不知道它是否合并为主。)

它使用一个简单的标记扫描收集器,但这里的诀窍是:当你想要运行标记阶段时,fork()。子进程运行标记,并发送一个对象列表,通过管道释放回父级,可以在闲暇时逐步释放它们。

这是有效的,因为子进程正在父内存状态的写时复制快照中运行,操作系统的内存管理器在硬件MMU的帮助下以合理的效率进行维护。一旦一个对象变得无法访问,它就不会再被引用,因此从旧快照中标记总是给出可以释放的对象的保守估计。


编辑:我能为这项工作找到的最佳参考资料是代码之夏提案:http://web.cecs.pdx.edu/~juenglin/revamping.html