垃圾收集器可以成为哪种应用程序?

时间:2010-09-07 20:31:18

标签: performance memory-management garbage-collection

由于它们的效率,大多数垃圾收集器算法在许多应用程序中都是无害的。然而,对象的“集合”确实需要很小的开销成本,以便扫描堆栈并从堆中释放未引用的对象。

我知道答案的一部分是“取决于”。但是,我想知道您正在处理的项目类型,支持自动堆内存分配的任何编程语言,垃圾收集器不是一个选项或成为关注< /强>

2 个答案:

答案 0 :(得分:2)

我一直使用垃圾收集语言超过15年(编程30年)。我的工业项目包括从油田的8,000个传感器到软(软)实时可视化和低延迟算法交易软件的软件整理数据。

我发现垃圾收集在所有情况下都很有用。我对两个主要项目中垃圾收集的延迟有所保留:可视化软件(在OCaml中)和算法交易软件(在F#中)。然而,我的担忧被证明是不合理的,因为在两种情况下,垃圾收集解决方案实际上表现出比非垃圾收集解决方案更好的延迟特性。特别是,将可视化软件从C ++转换为OCaml实际上将最坏情况下的停顿改进了5倍.C ++代码中的停顿是由于集合超出范围和引用计数导致雪崩析构函数调用析构函数。我们花了相当大的努力试图通过编写自定义分配器来解决这个问题,这些分配器会使销毁增量但从未成功。此外,我们发现纯功能数据结构通常具有出色的延迟特性,并且在没有垃圾收集器的情况下基本上是难以处理的。

我的“垃圾收集者很好”道德的唯一值得注意的例外是穷人的垃圾收集器,如引用计数和保守派垃圾收集器,如Boehm的GC。在专业背景下,我不会用驳船杆触碰它们。

答案 1 :(得分:1)

我目前正在研究Haskell中的一个程序,该程序使用来自MPSoC模拟的16个跟踪文件创建Direct-Acyclic-Graph(DAG)。每个文件超过115 MB,实际上我的解决方案需要以列表形式将所有这些文件存储在内存中,以便构建DAG,

我认为在这种情况下,垃圾收集器将成为提高程序效率的非常好的合作伙伴,因为实际上我真的需要将这些文件存储在内存中