我認爲(代人和增量)都是使垃圾收集更快停頓的不同方法。但是代際和增量之間有什麼區別?他們如何工作?對於實時軟件來說更好一些/產生較少的長時間停頓?分代和增量垃圾收集有什麼區別?
另外,Boehm GC是其中的哪一個?
我認爲(代人和增量)都是使垃圾收集更快停頓的不同方法。但是代際和增量之間有什麼區別?他們如何工作?對於實時軟件來說更好一些/產生較少的長時間停頓?分代和增量垃圾收集有什麼區別?
另外,Boehm GC是其中的哪一個?
代GC始終是遞增的,因爲它不會在一個週期內收集所有不可達的對象。相反,增量GC不一定採用生成方案來決定要收集哪些不可到達的對象。
代GC將不可達對象分爲不同的集合,大致根據他們最後的用途 - 他們的年齡,可以這麼說。基本理論是,最近創建的對象會很快變得無法訪問。因此,具有「年輕」物體的集合在早期收集。
增量GC 可能可以用上面的分代方案來實現,但是可以採用不同的方法來決定哪一組對象應該被掃描。
有人可能會看this wikipedia page和進一步向下,欲瞭解更多有關兩種GC方法的信息。
據貝姆的網站,他的GC是增量和代:
收集器使用標記 - 清除 算法。它提供 增量和 世代收集根據 操作系統提供 正確類型的虛擬內存支持。
至於實時環境而言,有幾個學術研究論文描述了新的和巧妙的方法來做到垃圾收集:
的增量垃圾收集器的任何垃圾收集器可以增量運行(這意味着它可以做一些工作,然後一些更多的工作,然後一些更多的工作),而不必運行整個集合不中斷。這與舊式的停止世界的垃圾收集器形成對比,例如,一個標記&掃描沒有任何其他代碼能夠在對象上工作。但是要清楚的是:增量垃圾收集器是否實際上並行地運行對於在相同對象上執行的其他代碼是不重要的,只要它是可中斷的(爲此它必須例如區分髒和乾淨的對象)。
A generation垃圾收集器區分舊的,中等的和新的對象。然後,它可以將GC複製到新對象(關鍵字「Eden」)上,爲舊對象標記&,並在介質對象上標記不同的可能性(取決於實現)。取決於實施方式,區分各代對象的方式是通過區域在內存中佔用或通過標誌進行區分。 GC代代相傳的挑戰是保持最新一代引用的對象列表。
Boem是這裏舉了一個增量代GC:http://en.wikipedia.org/wiki/Boehm_garbage_collector
http://www.memorymanagement.org/glossary/i.html#incremental.garbage.collection
一些跟蹤垃圾收集算法可以在 中間暫停收集週期,而突變仍在繼續,而不會結束了 數據不一致。這些收集器可以遞增地操作,並且適用於交互式系統。
原始垃圾收集器(1),一旦他們開始收集週期, 必須完成任務或放棄迄今爲止的所有工作。這是 通常是一個適當的限制,但是當系統 必須保證響應時間時是不可接受的;例如,在具有用戶界面和實時硬件控制系統的系統中。這樣的系統 可能會使用增量垃圾收集,以便對時間要求嚴格的垃圾收集可以在 的平行過程中有效地進行,而不會造成浪費。
http://www.memorymanagement.org/glossary/g.html#generational.garbage.collection
代垃圾收集跟蹤垃圾回收是 利用世代假說。對象收集 一代代。新的對象分配在最年輕或 託兒所的一代,如果他們生存,並提升到老一代。 老一輩的對象被譴責的頻率較低,從而節省了CPU 時間。
一個對象通常很少涉及一個年輕的對象。因此,一代中的物體通常很少涉及年輕一代中的物體。這意味着在收集年輕一代的過程中對舊世代的掃描可以通過記憶集合更有效地完成 。
在一些純粹的功能語言(即沒有更新)中,所有 引用都是及時倒退的,在這種情況下,記住集合是不必要的 。
Boehm-Demers-Weiser有一個增量模式,您可以通過調用GC_enable_incremental
來啓用。請參閱http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html
這是什麼伊甸園? – kingsmasher1 2011-09-30 08:59:57
年輕一代分爲空間,空間和伊甸園。分配工作在空間和伊甸園都完成,收集的空間和伊甸園都被複制到了空間;不同的是,伊甸園被徹底清除了。欲瞭解更多信息,請點擊此處查找伊甸園頁面:http://java.sun.com/docs/hotspot/gc1.4.2/faq.html – 2011-09-30 13:38:50