#author("2020-10-01T04:34:21+00:00","default:admin","admin") -[[ASP.NET Core のメモリ管理とガベージコレクション (GC):https://docs.microsoft.com/ja-jp/aspnet/core/performance/memory?view=aspnetcore-3.1]] *ガベージコレクション [#je5dddfb] -[[ガベージ コレクションの実行時構成オプション:https://docs.microsoft.com/ja-jp/dotnet/core/run-time-config/garbage-collector]] **ワークステーションGC・サーバGC [#se72081c] -[[ワークステーションとサーバーのガベージ コレクション:https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/workstation-server-gc]] -''ガベージ コレクターは、さまざまなシナリオに対応できるように自動的に調整される'' -ただし、作業負荷の特性に基づいてガベージ コレクションの種類を設定できる ***ワークステーションGC [#l37afaa1] -コレクションは、ガベージ コレクションをトリガーしたユーザー スレッドで、それと同じ優先順位で実行される -ユーザー スレッドは一般に通常の優先順位で実行されるため、その場合 (通常の優先順位のスレッドで実行された場合)、ガベージ コレクターの CPU 時間が他のスレッドと競合する -ネイティブ コードを実行するスレッドは、サーバーまたはワークステーションのガベージ コレクションでは中断されない -''&color(red){プロセッサが 1 つしかないコンピューターでは、構成設定に関係なく、常にワークステーションのガベージ コレクションが使用される};'' ***サーバGC [#z201fc94] -コレクションは、 THREAD_PRIORITY_HIGHEST の優先順位で実行される複数の専用スレッドで実行される -ヒープおよびガベージ コレクションを実行するための専用スレッドは CPU ごとに 1 つずつ用意され、複数のヒープのコレクションが同時に行われる -各ヒープには小さなオブジェクト ヒープと大きなオブジェクト ヒープがあり、どのヒープもユーザー コードからアクセスできる -異なるヒープのオブジェクトを相互に参照できる - 複数のガベージ コレクション スレッドが連携して処理を行うため、同じサイズのヒープを処理した場合、サーバーのガベージ コレクションの方がワークステーションのガベージ コレクションよりも高速 -一般に、サーバーのガベージ コレクションの方が、格納されるセグメントのサイズは大きくなる(一般論) -サーバーのガベージ コレクションでは、リソースが大量に消費されることがある --たとえば、プロセッサが 4 つのコンピューターで実行されているサーバー GC が 12 個のプロセスで使用されているとします。 --すべてのプロセスで偶然、同時にガベージを回収すると、互いに干渉することになります。同じプロセッサで 12 のスレッドがスケジュールされるためです。 -プロセスがアクティブの場合、すべてのプロセスでサーバー GC を使用することはお勧めしません。