12
page on the garbage collector不指定D是使用增量垃圾收集器還是停止使用版本。它確實提到暫停幾次,這可能是一個停止世界的垃圾收集器暗示,但我不知道。D編程語言是否使用增量垃圾回收器?
如果它不使用增量垃圾回收器,是否有任何特殊的原因呢?世界一站式的GC給交互式應用程序帶來了困難。
page on the garbage collector不指定D是使用增量垃圾收集器還是停止使用版本。它確實提到暫停幾次,這可能是一個停止世界的垃圾收集器暗示,但我不知道。D編程語言是否使用增量垃圾回收器?
如果它不使用增量垃圾回收器,是否有任何特殊的原因呢?世界一站式的GC給交互式應用程序帶來了困難。
嗨那裏的哈恩特粉絲(是的,我的化身是哈恩特的靈感)!那就是說,爲什麼增量垃圾收集器需要編寫屏障? – orlp 2012-03-26 14:13:22
「增量垃圾回收」通常意味着應用程序代碼允許在堆掃描開始和結束時在點之間運行。如果GC無法找到對其的任何引用,則會將對象視爲垃圾並收集...當GC掃描內存塊A時出現問題,然後應用程序代碼將唯一對象從塊B引用到A,並且那麼GC掃描塊B.如果GC沒有注意到塊A在掃描後被修改,它將永遠不會看到對該對象的任何引用,並丟棄它。 – 2012-03-26 18:19:59
這是錯誤的,它不一定需要在應用程序代碼中寫入屏障。它需要訪問MMU來跟蹤內存寫入 - 在Windows上我們有一個內存寫入觀察API。這不是魔術,也不是很難。 – Lothar 2014-07-04 00:05:33