Gambit-C の GC メカニズムとは何ですか? インタラクティブなアプリを作るためにこれに興味があります。バースト GC 操作を回避できるかどうかを知りたい。
2 に答える
これらのスレッドによると:
- https://mercure.iro.umontreal.ca/pipermail/gambit-list/2005-December/000521.html
- https://mercure.iro.umontreal.ca/pipermail/gambit-list/2008-September/002645.html
Gambit には、少なくとも 2008 年 9 月までは、伝統的なストップザワールド GC があります。スレッドの人々は、事前に割り当てられたオブジェクト プーリングを使用して、GC 操作自体を回避することを推奨しました。現在の実装についてはわかりませんでした。
※会話に同意するのは難しいです。自分で作成したものではないオブジェクトをプールすることはできず、最終的にフル GC は、蓄積された小さな/プールされていない一時オブジェクトによっていつか発生するためです。ただし、@Gregory が言及した方法は、この問題を回避するのに役立つ場合があります。ただし、Gambit にインクリメンタル GC が追加されることを望みます :)
http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/Debugging#Garbage_collection_threshold gambit によると、いくつかのコントロールがあります。
ガベージ コレクションのしきい値
実行時オプション h (キロバイト単位の最大ヒープサイズ) と l (ライブパーセント) に注意してください。詳細については、リファレンス マニュアルを参照してください。livepercent を 5 に設定すると、ガベージ コレクションが必要なオブジェクトに割り当てられたメモリが、そうでないオブジェクトに割り当てられたメモリよりも 19 倍多いときに、ガベージ コレクションが行われます。livepercent オプションが存在する理由は、ガベージ コレクターがメモリ消費に関してどれだけ控えめ/寛大であるべきか、CPU 負荷がどれだけ重いか/軽いかを制御する方法を提供するためです。
(##gc) によっていつでもガベージ コレクションを強制できます。
いくつかの少数の操作の後にガベージ コレクションを強制するか、ほぼ連続的にスケジュールするか、livepercent を 90 のように設定すると、おそらく gc は頻繁に実行され、実行ごとにあまり実行されません。これは全体的により高価になる可能性がありますが、費用の急増は避けてください。それにもかかわらず、サービスを高速化するためにその費用をかなり簡単に予算に入れることができます.