私の知る限り、GCがそのことを行っているとき、VMは実行中のすべてのスレッドをブロックします-または少なくともヒープを圧縮しているとき。これは、CLR と JVM の最新の実装(2010 年 1 月現在の製品バージョン) に当てはまりますか? 私は初歩的な仕組みを理解しているので、GC の基本的なリンクを提供しないでください。
コンパクションが発生すると参照が移動期間中に無効になる可能性があるため、グローバル ロックが該当すると思います。ヒープ全体をロックする (つまり、すべてのスレッドを間接的にブロックする) のが最も簡単なようです。より堅牢なメカニズムを想像することはできますが、多くの場合、KISS が優勢です。
私が間違っていれば、ブロックを最小限に抑えるために使用される戦略の簡単な説明によって私の質問に答えることができます. 私の推測が正しければ、次の 2 つの質問について洞察を提供してください。
これが実際に動作する場合、JBOSS や Glassfish などの重量級のエンタープライズ エンジンはどのようにして一貫して高い TPS レートを維持するのでしょうか? 私は JBOSS でいくつかのグーグル検索を行い、Web 処理に適したメモリ アロケータのような APACHE で何かを見つけることを期待していました。
NUMA 風のアーキテクチャ (おそらく近い将来) に直面すると、プロセスがスレッドとメモリ割り当てによってバインドされた CPU でない限り、これは惨事のように思えます。