2012-03-26 55 views

回答

13

當前實現(Druntime)使用停止在世界的垃圾收集,但語言本身並沒有把很多的限制上實現的細節。

D有一個併發垃圾收集器,CDGC,用於* nix類操作系統(它使用分叉)。

由於需要編寫屏障,增量GC很難在編譯環境中使用。虛擬機可以跟蹤參考,但系統語言可以調用memcpy和類似的函數,但不能。

+0

嗨那裏的哈恩特粉絲(是的,我的化身是哈恩特的靈感)!那就是說,爲什麼增量垃圾收集器需要編寫屏障? – orlp 2012-03-26 14:13:22

+6

「增量垃圾回收」通常意味着應用程序代碼允許在堆掃描開始和結束時在點之間運行。如果GC無法找到對其的任何引用,則會將對象視爲垃圾並收集...當GC掃描內存塊A時出現問題,然後應用程序代碼將唯一對象從塊B引用到A,並且那麼GC掃描塊B.如果GC沒有注意到塊A在掃描後被修改,它將永遠不會看到對該對象的任何引用,並丟棄它。 – 2012-03-26 18:19:59

+0

這是錯誤的,它不一定需要在應用程序代碼中寫入屏障。它需要訪問MMU來跟蹤內存寫入 - 在Windows上我們有一個內存寫入觀察API。這不是魔術,也不是很難。 – Lothar 2014-07-04 00:05:33