私は D 言語を学んでおり、その機能の多くが気に入っていますが、GC については少し懐疑的です。チャンスを与えたいのですが、最初に知りたいのは:
- どのくらいの頻度で実行されるかを見積もる方法は?
- どのくらいの期間実行されますか? 割り当てられたメモリの量、管理対象オブジェクトの量などに比例しますか?
現在の D2 ランタイムの GC について具体的に質問しています。
場合によっては GC によってパフォーマンスが向上することはわかっていますが、次の例はどうでしょうか。ゲームの開始時に大量のメモリ (数百メガバイトの複雑な構造) を割り当てるゲーム エンジンを想像してみてください。ただし、ゲームの実行中は割り当てられません。ほぼすべての割り当て/割り当て解除。しかし、いくつかはまだ発生します (たとえば、GUI の文字列操作から) - それらの小さなことが最終的に GC をトリガーし、割り当てられたすべてのメモリをスキャンする必要がありますか? 私が理解しているように、ほとんどのデータのメモリを自分で管理することにしたとしても、マネージド メモリ (文字列など) への参照を保持できるようにする場合は、範囲を GC に登録する必要があります。
もちろん、最初にプログラムして後でプロファイリングすることもできますが、事前にパフォーマンスについて少なくともいくつかの見積もりを作成できるようにしたいと考えています。後でいくつかの回避策に頼るよりはましです。(フリーリストのような解決策は、私の意見では醜い回避策であり、どこでも使用できるわけではありません。)