gpt4 book ai didi

algorithm - 是否有满足这些要求的垃圾回收算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:20:12 25 4
gpt4 key购买 nike

我正在为静态类型的面向对象语言编写编译器。目前我正在研究要使用的垃圾收集算法。我想知道是否有一个收藏家是:

  • 开源并记录在案,以便我可以实现。
  • 准确
  • 世代
  • 全局,即每个进程只有一个收集器,而不是说每个线程一个。
  • 增量和/或并发,以避免主要集合的长时间暂停。
  • 符合这种编程范式。一个例子是收集器,它在存在破坏性分配时变得非常慢。

编辑:澄清一下,我想知道是否有可执行的算法,而不是是否有现成的收集器。

最佳答案

有一种非实验性的垃圾收集算法实际上可以满足您的所有要求:简单的自动重新计数。总的来说,重新计数作为一个可行的选择并没有获得足够的信任,但实际上它在很多情况下都非常有效,从来没有任何大批量延迟,也不需要复杂的魔法。

一个问题仍然是清理循环引用,您至少可以将其留到极少数情况下进行;关心速度的应用程序开发人员可以在需要对象消失时明确地打破循环。

refcounting 的一个鲜为人知的特性是它比其他形式的垃圾回收对 dcache 更友好。如果您运行的循环每次都分配一些小的临时对象,则 refcounting GC(当然是显式内存管理)每次都可以重用相同的内存,从而避免不必要的缓存刷新。任何其他类型的 GC 只会定期释放对象,从而导致更大的内存占用,从而导致速度变慢。

对于重度多线程系统,引用计数不是很有效,因为每次访问引用计数时都需要获取锁。但是,如果您正在设计一种新语言,那么您可以做一件大事来提高整个语言的性能和可靠性:防止几乎所有对象在线程之间共享。 IE。使共享明确。如果这样做,您将知道哪些对象是共享的,哪些不是共享的,因此在递增/递减引用计数时需要锁定哪些对象,哪些可以保持解锁状态。当没有任何锁定时,重新计数性能会非常出色。

关于algorithm - 是否有满足这些要求的垃圾回收算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4863349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com