Pengumpulan sampah latar belakang

Dalam pengumpulan sampah latar belakang (GC), generasi sementara (0 dan 1) dikumpulkan sesuai kebutuhan saat pengumpulan generasi 2 sedang berlangsung. Pengumpulan sampah latar belakang dilakukan pada satu atau lebih utas khusus, tergantung pada apakah stasiun kerja atau server GC miliknya, dan hanya berlaku untuk koleksi generasi 2.

Pengumpulan sampah latar belakang diaktifkan secara default. Ini dapat diaktifkan atau dinonaktifkan dengan pengaturan konfigurasi gcConcurrent di aplikasi .NET Framework atau pengaturan System.GC.Concurrent di aplikasi .NET Core dan .NET 5 dan yang lebih baru.

Catatan

Pengumpulan sampah latar belakang menggantikan pengumpulan sampah kongruen dan tersedia dalam versi .NET Framework 4 dan yang lebih baru. Di .NET Framework 4, hanya didukung untuk pengumpulan sampah stasiun kerja. Dimulai dengan .NET Framework 4.5, pengumpulan sampah latar belakang tersedia untuk stasiun kerja dan pengumpulan sampah server.

Koleksi pada generasi sementara selama pengumpulan sampah latar belakang dikenal sebagai pengumpulan sampah latar depan. Saat pengumpulan sampah latar depan terjadi, semua utas terkelola ditangguhkan.

Saat pengumpulan sampah latar belakang sedang berlangsung dan Anda telah mengalokasikan cukup banyak objek di generasi 0, CLR melakukan pengumpulan sampah latar depan generasi 0 atau generasi 1. Utas pengumpulan sampah latar belakang khusus memeriksa di titik aman yang sering untuk menentukan apakah ada permintaan untuk pengumpulan sampah latar depan. Jika ada, koleksi latar belakang menangguhkan dirinya sendiri sehingga pengumpulan sampah latar depan dapat terjadi. Setelah pengumpulan sampah latar depan selesai, utas pengumpulan sampah latar belakang khusus dan utas pengguna dilanjutkan.

Pengumpulan sampah latar belakang menghilangkan pembatasan alokasi yang diberlakukan oleh pengumpulan sampah kongruen, karena pengumpulan sampah sementara dapat terjadi selama pengumpulan sampah latar belakang. Pengumpulan sampah latar belakang dapat menghilangkan objek mati dalam generasi sementara. Ini juga dapat memperluas tumpukan jika diperlukan selama pengumpulan sampah generasi 1.

Stasiun kerja latar belakang vs. server GC

Dimulai dengan .NET Framework 4.5, pengumpulan sampah latar belakang tersedia untuk server GC. Background GC adalah mode default untuk pengumpulan sampah server.

Pengumpulan sampah server latar belakang berfungsi mirip dengan pengumpulan sampah stasiun kerja latar belakang, tetapi ada beberapa perbedaan:

  • Pengumpulan sampah stasiun kerja latar belakang menggunakan satu utas pengumpulan sampah latar belakang khusus, sedangkan pengumpulan sampah server latar belakang menggunakan beberapa utas. Biasanya, ada utas khusus untuk setiap prosesor logis.

  • Berbeda dengan utas pengumpulan sampah latar belakang stasiun kerja, utas GC server latar belakang tidak kehabisan waktu.

Ilustrasi berikut menunjukkan pengumpulan sampah stasiun kerja latar belakang yang dilakukan pada utas khusus terpisah:

Background workstation garbage collection

Ilustrasi berikut menunjukkan pengumpulan sampah server latar belakang yang dilakukan pada utas khusus terpisah:

Background server garbage collection

Pengumpulan sampah kongruen

Tip

Bagian ini berlaku untuk:

  • .NET Framework 3.5 dan yang lebih lama untuk pengumpulan sampah stasiun kerja
  • .NET Framework 4 dan yang lebih lama untuk pengumpulan sampah server

Sampah kongruen digantikan oleh pengumpulan sampah latar belakang di versi selanjutnya.

Dalam pengumpulan sampah stasiun kerja atau server, Anda dapat mengaktifkan pengumpulan sampah kongruen, yang memungkinkan utas berjalan bersamaan dengan utas khusus yang melakukan pengumpulan sampah selama sebagian besar durasi pengumpulan. Opsi ini hanya memengaruhi pengumpulan sampah di generasi 2; generasi 0 dan 1 selalu non-kongruen karena mereka selesai dengan cepat.

Pengumpulan sampah kongruen memungkinkan aplikasi interaktif menjadi lebih responsif dengan meminimalkan jeda untuk koleksi. Utas terkelola dapat terus berjalan sebagian besar waktu saat utas pengumpulan sampah kongruen berjalan. Desain ini menghasilkan jeda yang lebih pendek saat pengumpulan sampah terjadi.

Pengumpulan sampah kongruen dilakukan pada utas khusus. Secara default, CLR menjalankan pengumpulan sampah stasiun kerja dengan pengumpulan sampah kongruen yang diaktifkan pada komputer prosesor tunggal dan multi-prosesor.

Ilustrasi berikut menunjukkan pengumpulan sampah kongruen yang dilakukan pada utas khusus yang terpisah.

Concurrent Garbage Collection Threads

Lihat juga