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 #
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:
Server GC aktif : False
Jumlah heap : 1
Latency mode : InteractiveMari kita bedah baris demi baris:
GCSettings.IsServerGC: hasilFalsemenunjukkan proses berjalan dengan workstation GC, yaitu bawaan untuk project console.konfigurasi["HeapCount"]: APIGC.GetConfigurationVariables()membaca konfigurasi efektif runtime. Nilai1menegaskan workstation GC memakai satu heap.GCSettings.LatencyMode:Interactiveadalah mode latensi bawaan workstation GC; bahasan lengkapnya ada pada bab GC Latency Modes.
Mengaktifkan Server GC #
Cara paling lazim adalah properti pada file project:
<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.
| Aspek | Workstation GC | Server GC |
|---|---|---|
| Jumlah heap | 1 | satu per inti prosesor |
| Thread GC | berbagi thread aplikasi | thread GC khusus |
| Target utama | latensi rendah untuk UI | throughput maksimum |
| Konsumsi memori | lebih kecil | lebih besar |