ガベージコレクション †
ワークステーションGC・サーバGC †
- ガベージ コレクターは、さまざまなシナリオに対応できるように自動的に調整される
- ただし、作業負荷の特性に基づいてガベージ コレクションの種類を設定できる
ワークステーションGC †
- コレクションは、ガベージ コレクションをトリガーしたユーザー スレッドで、それと同じ優先順位で実行される
- ユーザー スレッドは一般に通常の優先順位で実行されるため、その場合 (通常の優先順位のスレッドで実行された場合)、ガベージ コレクターの CPU 時間が他のスレッドと競合する
- ネイティブ コードを実行するスレッドは、サーバーまたはワークステーションのガベージ コレクションでは中断されない
- プロセッサが 1 つしかないコンピューターでは、構成設定に関係なく、常にワークステーションのガベージ コレクションが使用される
サーバGC †
- コレクションは、 THREAD_PRIORITY_HIGHEST の優先順位で実行される複数の専用スレッドで実行される
- ヒープおよびガベージ コレクションを実行するための専用スレッドは CPU ごとに 1 つずつ用意され、複数のヒープのコレクションが同時に行われる
- 各ヒープには小さなオブジェクト ヒープと大きなオブジェクト ヒープがあり、どのヒープもユーザー コードからアクセスできる
- 異なるヒープのオブジェクトを相互に参照できる
複数のガベージ コレクション スレッドが連携して処理を行うため、同じサイズのヒープを処理した場合、サーバーのガベージ コレクションの方がワークステーションのガベージ コレクションよりも高速
- 一般に、サーバーのガベージ コレクションの方が、格納されるセグメントのサイズは大きくなる(一般論)
- サーバーのガベージ コレクションでは、リソースが大量に消費されることがある
- たとえば、プロセッサが 4 つのコンピューターで実行されているサーバー GC が 12 個のプロセスで使用されているとします。
- すべてのプロセスで偶然、同時にガベージを回収すると、互いに干渉することになります。同じプロセッサで 12 のスレッドがスケジュールされるためです。
- プロセスがアクティブの場合、すべてのプロセスでサーバー GC を使用することはお勧めしません。