2012-03-26 20 views
12

page on the garbage collectorは、Dがインクリメンタルガベージコレクタを使用するのか、世界を止めるバージョンを使用するのかを指定しません。 を数回中断してと言いますが、これは世界的なガベージコレクターのヒントかもしれませんが、わかりません。Dプログラミング言語でインクリメンタルガベージコレクタを使用していますか?

インクリメンタルガベージコレクタを使用しない場合は、特に理由はありますか?世界を止めるGCは、インタラクティブなアプリケーションに苦労します。

答えて

13

現在の実装(Druntime)は、ストップザワールドガベージコレクタを使用しますが、言語自体は実装の詳細に多くの制限を設けません。

* nixのようなOS(フォークを使用します)では、Dのための同時ガベージコレクタがあります(CDGC)。

書き込みバリアが必要なため、インクリメンタルGCはコンパイルされた環境では使用するのが困難です。 VMは参照を追跡できますが、memcpyと同様の機能を呼び出すことができるシステム言語は呼び出すことができません。

+0

こんにちは、私のアバターはHaunterに触発されています。つまり、インクリメンタルガベージコレクタには障壁を書き込む必要があるのはなぜですか? – orlp

+6

"インクリメンタルガベージコレクション"は通常、ヒープスキャンの開始と終了の間にアプリケーションコードが実行されることを意味します。 GCが参照を見つけることができない場合、オブジェクトはガベージとみなされ、収集されます。GCはメモリブロックAをスキャンし、次にアプリケーションコードがブロックBからAへのオブジェクトへの唯一の参照を移動するときに発生します。 GCはブロックBをスキャンする。ブロックAがスキャンされた後にGCが変更されたことをGCが認識しない場合、オブジェクトへの参照は決して見られず、それを破棄する。 –

+0

これは間違っていますが、必ずしもアプリケーションコードに書き込み障壁が必要なわけではありません。メモリ書き込みを追跡するにはMMUにアクセスする必要があります.Windowsにはメモリ書き込みAPIがあります。それは魔法ではなく、難しくありません。 – Lothar

関連する問題