実際にすべての要件を満たしている実験的でないガベージコレクションアルゴリズムがあります。単純な自動参照です。全体として、実際にはrefcountingは実行可能なオプションとして十分なクレジットを得ることはできませんが、実際には多くの状況でうまく機能し、大きなバッチ遅延はなく、複雑な魔法の必要はありません。
懸念事項の1つは依然として循環参照をクリーンアップしていることです。速度を心配しているアプリ開発者は、オブジェクトがなくなる必要があるときにループを明示的に解除できます。
refcountingのごくわずかな点は、他のガベージコレクションよりもはるかにdcacheに優しいことです。ループを実行するたびに小さな一時オブジェクトを割り当てるループを実行している場合、refcounting GC(または明示的なメモリ管理)は毎回同じメモリを再利用できるため、不要なキャッシュフラッシュを回避できます。他の種類のGCでは、オブジェクトを定期的に解放するだけで、メモリフットプリントが非常に大きくなるため、速度が遅くなります。
Refcountに触れるたびにロックを取得する必要があるため、Refcountingは多量のマルチスレッドシステムではあまり効率的ではありません。しかし、もしあなたが新しい言語を設計しているのであれば、あなたの言語でのパフォーマンスと信頼性を向上させるためにできることはたくさんあります。ほとんどのオブジェクトがスレッド間で共有されないようにします。すなわち、共有を明示的にする。これを行うと、どのオブジェクトが共有されていないかを知ることができるため、refcountを増減するときにロックする必要があり、ロックされていないオブジェクトをロックする必要があります。ロックがない場合は、実際の再生回数は非常に優れています。
は、.NETやJavaプラットフォームをターゲットにする場合、あなたが自由のための1つを取得します。 –
ここにはうんざりして良い記事があります(http://blogs.msdn.com/b/abhinaba/archive/2009/01/25/back-to-basic-series-on-dynamic-memory-management.aspx )をガベージコレクションに追加しました。 – jason
@Henk、彼はコンパイラを作成しています – ThomasMcLeod