次の方法で共有


バックグラウンド ガベージ コレクション

バックグラウンド ガベージ コレクション (GC) では、ジェネレーション 2 のコレクションの進行中に、エフェメラルジェネレーション (0 と 1) が必要に応じて収集されます。 バックグラウンド ガベージ コレクションは、ワークステーションまたはサーバー GC のどちらであるかに応じて、1 つ以上の専用スレッドで実行され、ジェネレーション 2 のコレクションにのみ適用されます。

バックグラウンド ガベージ コレクションは既定で有効になっています。 これは、.NET Framework アプリの gcConcurrent 構成設定、または .NET Core および .NET 5 以降のアプリの System.GC.Concurrent 設定で有効または無効にすることができます。

バックグラウンド ガベージ コレクションは 同時実行ガベージ コレクション に代わるものであり、.NET Framework 4 以降のバージョンで使用できます。 .NET Framework 4 では、 ワークステーション のガベージ コレクションでのみサポートされています。 .NET Framework 4.5 以降では、 ワークステーションサーバー の両方のガベージ コレクションでバックグラウンド ガベージ コレクションを使用できます。

バックグラウンド ガベージ コレクション中のエフェメラル世代のコレクションは、 フォアグラウンド ガベージ コレクションと呼ばれます。 フォアグラウンド ガベージ コレクションが発生すると、すべてのマネージド スレッドが中断されます。

バックグラウンド ガベージ コレクションが進行中で、ジェネレーション 0 で十分なオブジェクトを割り当てた場合、CLR はジェネレーション 0 またはジェネレーション 1 のフォアグラウンド ガベージ コレクションを実行します。 専用のバックグラウンド ガベージ コレクション スレッドは、頻繁にセーフ ポイントで確認し、フォアグラウンド ガベージ コレクションの要求があるかどうかを判断します。 存在する場合は、バックグラウンド コレクション自体が中断され、フォアグラウンド ガベージ コレクションが発生する可能性があります。 フォアグラウンド ガベージ コレクションが完了すると、専用のバックグラウンド ガベージ コレクション スレッドとユーザー スレッドが再開されます。

バックグラウンド ガベージ コレクションでは、バックグラウンド ガベージ コレクション中にエフェメラル ガベージ コレクションが発生する可能性があるため、同時実行ガベージ コレクションによって課される割り当て制限が削除されます。 バックグラウンド ガベージ コレクションでは、エフェメラル世代のデッド オブジェクトを削除できます。 また、ジェネレーション 1 のガベージ コレクション中に必要に応じてヒープを拡張することもできます。

バックグラウンド ワークステーションとサーバー GC

.NET Framework 4.5 以降では、サーバー GC でバックグラウンド ガベージ コレクションを使用できます。 バックグラウンド GC は、サーバー ガベージ コレクションの既定のモードです。

バックグラウンド サーバーのガベージ コレクションは、バックグラウンド ワークステーションのガベージ コレクションと同様に機能しますが、いくつかの違いがあります。

  • バックグラウンド ワークステーションのガベージ コレクションでは、専用のバックグラウンド ガベージ コレクション スレッドが 1 つ使用されますが、バックグラウンド サーバーのガベージ コレクションでは複数のスレッドが使用されます。 通常、論理プロセッサごとに専用のスレッドがあります。

  • ワークステーションのバックグラウンド ガベージ コレクション スレッドとは異なり、バックグラウンド サーバーの GC スレッドはタイムアウトしません。

次の図は、別の専用スレッドで実行されるバックグラウンド ワークステーション のガベージ コレクションを示しています。

バックグラウンド ワークステーションのガベージ コレクション

次の図は、個別の専用スレッドで実行されるバックグラウンド サーバー のガベージ コレクションを示しています。

バックグラウンド サーバーのガベージ コレクション

同時実行ガベージ コレクション

ヒント

このセクションは次に適用されます。

  • ワークステーション ガベージ コレクション用の .NET Framework 3.5 以前
  • サーバー ガベージ コレクション用の .NET Framework 4 以前

同時実行ガベージ は、以降のバージョンではバックグラウンド ガベージ コレクションに置き換えられます。

ワークステーションまたはサーバーのガベージ コレクションでは、 同時実行ガベージ コレクションを有効にできます。これにより、コレクションのほとんどの期間、ガベージ コレクションを実行する専用スレッドでスレッドを同時に実行できます。 このオプションは、ジェネレーション 2 のガベージ コレクションにのみ影響します。世代 0 と 1 は、高速に終了するため、常に非同時実行です。

同時実行ガベージ コレクションを使用すると、コレクションの一時停止を最小限に抑えることで、対話型アプリケーションの応答性を向上できます。 同時実行ガベージ コレクション スレッドが実行されている間、マネージド スレッドはほとんどの時間実行を継続できます。 この設計では、ガベージ コレクションの実行中に一時停止が短くなります。

同時実行ガベージ コレクションは、専用スレッドで実行されます。 既定では、CLR は、シングル プロセッサ コンピューターとマルチプロセッサ コンピューターの両方で同時実行ガベージ コレクションが有効になっているワークステーション ガベージ コレクションを実行します。

次の図は、個別の専用スレッドで実行される同時実行ガベージ コレクションを示しています。

同時実行ガベージ コレクション スレッド

こちらも参照ください