鸚鵡虛擬機器/記憶體和垃圾回收
外觀
< 鸚鵡虛擬機器
鸚鵡在稱為競技場的大塊中分配記憶體。每個競技場都有足夠的空間來容納大小為 M 的 N 個專案,通常緊密地打包在一起在連續的記憶體位置。一些收集器也可能在競技場中儲存額外的元資料。相同型別的多個競技場作為連結列表儲存在池中。一個池可能沒有競技場,一個競技場或多個競技場,但給定池中的競技場都包含相同大小的物件。但是,每個競技場可以容納不同數量的物件。
鸚鵡直譯器結構(它維護整個虛擬機器的狀態)包含指向arena_base結構的指標。競技場基本結構包含指向所有不同池的指標,以及用於記憶體管理的幾個其他重要資料項。
鸚鵡有許多可用的垃圾收集器,可以在編譯時使用編譯器指令選擇。目前最成熟和最健壯的收集器是簡單的標記和清除收集器 GC_MS。不同的收集器可以在編譯之前在檔案include/Parrot/settings.h中啟用或停用。該檔案包含許多可以設定的選項,以自定義鸚鵡的行為。
新的垃圾收集器的開發以及當前收集器系統的改進正在進行中,此頁面可能已過時。 |
標記和清除(MS)收集器是鸚鵡中唯一一個目前足夠成熟和穩定以供定期使用的收集器。但是,此收集器是鸚鵡中幾個效能問題的原因,並且正在積極努力將其替換。在 1.0.0 版本中,標記和清除收集器可能會被棄用或從鸚鵡中完全刪除。
目前正在開發一種新的垃圾收集方案,它使用三色標記演算法來標記資料物件。三色演算法將使收集器能夠實現增量行為,從而避免 MS 收集器對大型記憶體池的“停止世界”行為。
編寫新的收集器就像實現特定的介面一樣簡單。此介面在 PDD 09 中有詳細定義,但我們將在這裡介紹一些基本知識。
- http://www.parrotcode.org/docs/memory_internals.html
- http://www.parrotcode.org/docs/pdd/pdd09_gc.html