我对设计一种用于进行音频合成的方案风格很感兴趣,但我非常关心在满足音频所需的低延迟时进行适当的垃圾收集。我想知道该领域的人是否能够向我指出可能适合这种环境的垃圾收集算法。我正在研究实时垃圾收集,这似乎是有道理的,因为我想限制垃圾收集器花费的时间,这样我就不会在音频中暂停......虽然也许一个收集器只是“足够快”并很好地分配其工作是否足够好?我一点也不担心多线程/多处理,而且我绝对不担心浪费大量空间来寻找这些目标。我追求的是可预测的,简单的,
谢谢!
我对设计一种用于进行音频合成的方案风格很感兴趣,但我非常关心在满足音频所需的低延迟时进行适当的垃圾收集。我想知道该领域的人是否能够向我指出可能适合这种环境的垃圾收集算法。我正在研究实时垃圾收集,这似乎是有道理的,因为我想限制垃圾收集器花费的时间,这样我就不会在音频中暂停......虽然也许一个收集器只是“足够快”并很好地分配其工作是否足够好?我一点也不担心多线程/多处理,而且我绝对不担心浪费大量空间来寻找这些目标。我追求的是可预测的,简单的,
谢谢!
在类 Unix 操作系统的单进程设置中,我听说过一种有趣的方法。(它是为Nickle实验实现的,但我不知道它是否被合并到 master 。)
它使用了一个简单的标记清除收集器,但诀窍在于:当您想要运行标记阶段时,fork()
. 子进程运行标记,并通过管道将要释放的对象列表发送回父进程,父进程可以在闲暇时逐步释放它们。
这是因为子进程在父内存状态的写时复制快照中运行,由操作系统的内存管理器在硬件 MMU 的帮助下以合理的效率维护。一旦一个对象变得不可访问,它就不会再次被引用,因此从旧快照中标记总是给出可以释放的对象的保守估计。
编辑:我能为这项工作找到的最佳参考是代码之夏提案:http ://web.cecs.pdx.edu/~juenglin/revamping.html