D 程式設計/垃圾回收器
外觀
< D 程式設計
此頁面應作為實際 GC 實現的內部機制、介面、限制等的文件。
實際實現具有以下特點
- 保守的(與精確的和內部指標相比)
- 停止世界(與增量式和併發式相比)
- 標記和清除(與複製相比)
- 非移動式(與移動式相比)
另請參見 垃圾收集
- std.thread
- 使用實際的棧指標位置支援 GC。
- /internal/gc/gc.d
- GC 介面,實現的包裝器。
- /internal/gc/gcx.d
- GC 實現
- /internal/gc/gcstub.d
- GC 的存根,防止連結到應用程式
為了停止世界,gc 呼叫 Thread.pauseAll()。Linux 上的停止機制使用訊號 SIGUSR1 和 SIGUSR2。在暫停執行緒的情況下,訊號處理程式將當前棧指標儲存在 stackTop 中,因此該指標始終是最新的。
GC 僅在需要分配記憶體且當前沒有可用記憶體時呼叫。如果 gc 無法釋放足夠的記憶體,則會從系統請求新的記憶體。
入口點是 gcx.d fullCollect()
- 標記階段
- 掃描所有執行緒的棧
- 掃描根(全域性變數)
- 掃描範圍(非 GC 管理的記憶體,其中也可能包含對 GC 物件的引用)
- 完成所有收集的物件
- 清除未使用的記憶體