私は非常に単純なコンパイラ (一種の学術研究) を設計しており、単純な参照カウント GC とマークとスイープを実装することを考えています。アイデアは、循環がない場合に参照カウントが死んだオブジェクトを非常に早期に解放できるということです。また、これは次のアイデアにつながります。マークとスイープのプロセスは多くの参照を反復する必要があるため、通常、マークとスイープにはいくつかの一時停止が含まれます。以前の参照カウントは、マークとスイープをより速く (より少ない要素で) 行うべきではありませんか? この考えはナンセンスですか?私はこれまでにこれほど複雑なことを実装したことがなく、それが非常に悪い考えであることが判明するためだけに多くの作業をしたくありません。
3 に答える
3
最初は直感的に同意しましたが、この直感は間違っているという結論に達しました。ref-counting はマーク アンド スイープ GC (略して msgc と呼びます) の前にガベージを削除しますが、これは msgc のパフォーマンスにはあまり役立ちません。マーキング段階ではガベージを見ることさえないので、refcounting によるガベージの早期除去はマーキングをスピードアップしません。これは実装方法に依存するため、スイープフェーズについてはよくわかりませんが、これを価値のあるものにするのに十分なゴミの量の影響を受けないいくつかの戦略を想像できます.
複雑さが増すことを考えると、おそらくそれだけの価値はありません。いずれにせよ、単純な msgc からあまり多くのパフォーマンスを得ることはできず、refcounts の追加コスト (より大きなオブジェクト ヘッダー、より遅い割り当てなど) は、1 つでもあったとしても利益を減らします。
于 2013-05-07T16:34:43.233 に答える