2010-09-07 37 views
0

由於其效率的原因,大多數垃圾收集器算法在許多應用程序中都是無害的。但是,對象的「集合」確實需要很小的開銷,以便掃描堆棧並從堆中釋放未引用的對象。垃圾收集器可以用於哪種應用程序?

我知道答案的一部分是「它取決於」。但是,我想知道您所從事的項目的種類,以任何支持自動堆內存分配的編程語言,,其垃圾收集器不是選項或成爲關注

回答

2

我一直在專業使用垃圾收集語言超過15年(以及30年的編程)。我的工業項目包括整個油田的8,000個轉換器的數據軟件整理到(軟)實時可視化和低延遲算法交易軟件。

我發現垃圾收集在所有情況下都很有用。我對兩個主要項目垃圾收集的延遲持保留意見:可視化軟件(在OCaml中)和算法交易軟件(在F#中)。然而,我的擔憂被證明是不合理的,因爲垃圾收集解決方案在兩種情況下實際上表現出比非垃圾收集解決方案更好的延遲特徵。特別是,將可視化軟件從C++轉換爲OCaml實際上是改進了最壞的情況是5倍。C++代碼中的停頓是由於集合超出範圍和引用計數而導致崩潰析構函數調用析構函數。我們花費了相當大的努力試圖通過編寫自定義分配器來解決這個問題,這會使得銷燬增加,但從未成功。另外,我們發現純粹功能的數據結構通常表現出優異的延遲特性,並且它們基本上是沒有垃圾收集器的棘手問題。

我的「垃圾收集器很好」的唯一值得注意的例外是道德貧困者的垃圾收集器,如引用計數和保守的垃圾收集器,如Boehm的GC。我不會在專業環境中用駁杆接觸它們。

1

我目前正在研究Haskell中的一個程序,該程序使用MPSoC中的16個跟蹤文件創建Direct-Acyclic-Graph(DAG)。每個文件有超過115 MB,實際上我的解決方案需要以列表形式將所有這些文件存儲在內存中,以構建DAG,

我認爲在這種情況下,垃圾收集器將成爲提高我的效率的非常好的合作伙伴程序,因爲實際上我真的需要將這些文件存儲在內存中

+0

我很想聽聽你的程序在有GC和沒有GC的情況下的性能。你已經開始了嗎?你選擇了哪種編程語言? – jdecuyper 2010-09-26 16:06:48

+1

性能非常糟糕,因爲我在使用它們之前將所有16個文件加載到內存中,但現在我正在通過另一種方式來解決問題,通過使用Haskell的懶惰方式逐個部分地使用文件。這將使垃圾收集器釋放已經在內存中計算出來的部分 – 2010-09-26 21:21:47