GC .NET punya dua mode kerja utama. Workstation GC berjalan pada satu heap tunggal dan dirancang untuk aplikasi desktop yang berebut sumber daya dengan proses lain. Server GC menyediakan satu heap beserta satu thread GC untuk setiap inti prosesor, sehingga pengklaiman berjalan paralel dan throughput aplikasi server meningkat. Mode ini menentukan arsitektur heap sejak proses dimulai, dan kita bisa membuktikan mode aktif dari dalam kode.

Contoh: Membaca Mode GC Aktif #

csharp
var konfigurasi = GC.GetConfigurationVariables();
Console.WriteLine($"Server GC aktif : {GCSettings.IsServerGC}");
Console.WriteLine($"Jumlah heap     : {konfigurasi["HeapCount"]}");
Console.WriteLine($"Latency mode    : {GCSettings.LatencyMode}");

Output yang Dihasilkan:

text
Server GC aktif : False
Jumlah heap     : 1
Latency mode    : Interactive

Mari kita bedah baris demi baris:

  1. GCSettings.IsServerGC: hasil False menunjukkan proses berjalan dengan workstation GC, yaitu bawaan untuk project console.
  2. konfigurasi["HeapCount"]: API GC.GetConfigurationVariables() membaca konfigurasi efektif runtime. Nilai 1 menegaskan workstation GC memakai satu heap.
  3. GCSettings.LatencyMode: Interactive adalah mode latensi bawaan workstation GC; bahasan lengkapnya ada pada bab GC Latency Modes.

Mengaktifkan Server GC #

Cara paling lazim adalah properti pada file project:

text
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <ServerGarbageCollection>true</ServerGarbageCollection>
  </PropertyGroup>

</Project>

Setelah dibangun ulang, pengaturan ini terekam di runtimeconfig.json sebagai System.GC.Server=true. Bab GC Configuration memuat bentuk lengkapnya. Perubahan mode hanya berlaku pada proses baru; GC tidak bisa beralih mode di tengah jalan.

Server GC juga menyesuaikan jumlah heap dengan jumlah inti prosesor yang terlihat oleh proses, termasuk saat proses berjalan di dalam container dengan pembatasan CPU. Oleh karena itu aplikasi yang sama bisa melaporkan angka heap yang berbeda antar lingkungan, sedangkan workstation GC selalu melaporkan satu heap.

AspekWorkstation GCServer GC
Jumlah heap1satu per inti prosesor
Thread GCberbagi thread aplikasithread GC khusus
Target utamalatensi rendah untuk UIthroughput maksimum
Konsumsi memorilebih kecillebih besar