Kelas System.GC

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Kelas GC mengontrol pengumpul sampah. Pengumpul sampah adalah komponen runtime bahasa umum yang mengontrol alokasi dan pelepasan memori terkelola. Metode dalam kelas ini memengaruhi ketika pengumpulan sampah dilakukan pada objek dan ketika sumber daya yang dialokasikan oleh objek dilepaskan. Properti di kelas ini memberikan informasi tentang jumlah total memori yang tersedia dalam sistem dan kategori usia, atau pembuatan, memori yang dialokasikan untuk objek.

Pengumpul sampah melacak dan merebut kembali objek yang dialokasikan dalam memori terkelola. Secara berkala, pengumpul sampah melakukan pengumpulan sampah untuk mengklaim kembali memori yang dialokasikan untuk objek yang tidak ada referensi yang valid. Pengumpulan sampah terjadi secara otomatis ketika permintaan memori tidak dapat dipenuhi menggunakan memori gratis yang tersedia. Atau, aplikasi dapat memaksa pengumpulan sampah menggunakan metode .Collect

Pengumpulan sampah terdiri dari langkah-langkah berikut:

  1. Pengumpul sampah mencari objek terkelola yang dirujuk dalam kode terkelola.
  2. Pengumpul sampah mencoba menyelesaikan objek yang tidak direferensikan.
  3. Pengumpul sampah membebaskan objek yang tidak direferensikan dan mengklaim kembali memori mereka.

Sumber daya tidak terkelola

Selama koleksi, pengumpul sampah tidak akan membebaskan objek jika menemukan satu atau beberapa referensi ke objek dalam kode terkelola. Namun, pengumpul sampah tidak mengenali referensi ke objek dari kode yang tidak dikelola, dan mungkin membebaskan objek yang digunakan secara eksklusif dalam kode yang tidak dikelola kecuali secara eksplisit mencegah melakukannya. Metode ini KeepAlive menyediakan mekanisme yang mencegah pengumpul sampah mengumpulkan objek yang masih digunakan dalam kode yang tidak dikelola.

Selain dari alokasi memori terkelola, implementasi pengumpul sampah tidak mempertahankan informasi tentang sumber daya yang disimpan oleh objek, seperti handel file atau koneksi database. Ketika jenis menggunakan sumber daya tidak terkelola yang harus dirilis sebelum instans jenis direklamasi, jenis dapat mengimplementasikan finalizer.

Dalam kebanyakan kasus, finalizer diimplementasikan dengan mengesampingkan Object.Finalize metode; namun, jenis yang ditulis dalam C# atau C++ mengimplementasikan destruktor, yang kompilator berubah menjadi penimpaan Object.Finalize. Dalam kebanyakan kasus, jika objek memiliki finalizer, pengumpul sampah memanggilnya sebelum membebaskan objek. Namun, pengumpul sampah tidak diharuskan untuk memanggil finalizer dalam semua situasi; misalnya, metode ini SuppressFinalize secara eksplisit mencegah finalizer objek dipanggil. Selain itu, pengumpul sampah tidak diharuskan menggunakan utas tertentu untuk menyelesaikan objek, atau menjamin urutan di mana finalizer dipanggil untuk objek yang saling mereferensikan tetapi tersedia untuk pengumpulan sampah.

Dalam skenario di mana sumber daya harus dirilis pada waktu tertentu, kelas dapat mengimplementasikan IDisposable antarmuka, yang berisi IDisposable.Dispose metode yang melakukan tugas manajemen dan pembersihan sumber daya. Kelas yang menerapkan Dispose harus menentukan, sebagai bagian dari kontrak kelas mereka, jika dan kapan konsumen kelas memanggil metode untuk membersihkan objek. Pengumpul sampah tidak, secara default, memanggil Dispose metode ; namun, implementasi Dispose metode dapat memanggil metode di GC kelas untuk menyesuaikan perilaku finalisasi pengumpul sampah.

Untuk informasi selengkapnya tentang finalisasi objek dan pola pembuangan, lihat Membersihkan Sumber Daya yang Tidak Dikelola.

Penuaan dan pembuatan objek

Pengumpul sampah dalam runtime bahasa umum mendukung penuaan objek menggunakan generasi. Generasi adalah satuan ukuran usia relatif objek dalam memori. Nomor pembuatan, atau usia, objek menunjukkan pembuatan tempat objek berada. Objek yang dibuat baru-baru ini adalah bagian dari generasi yang lebih baru, dan memiliki angka generasi yang lebih rendah daripada objek yang dibuat sebelumnya dalam siklus hidup aplikasi. Objek dalam generasi terbaru berada di generasi 0. Implementasi pengumpul sampah ini mendukung tiga generasi objek, generasi 0, 1, dan 2. Anda dapat mengambil nilai MaxGeneration properti untuk menentukan nomor pembuatan maksimum yang didukung oleh sistem.

Penuaan objek memungkinkan aplikasi untuk menargetkan pengumpulan sampah pada serangkaian generasi tertentu daripada mengharuskan pengumpul sampah untuk mengevaluasi semua generasi. Kelebihan beban Collect metode yang menyertakan generation parameter memungkinkan Anda menentukan generasi tertua yang akan dikumpulkan sampah.

Melarang pengumpulan sampah

Pengumpul sampah mendukung mode latensi wilayah tanpa GC yang dapat digunakan selama eksekusi jalur penting di mana pengumpulan sampah dapat berdampak buruk pada performa aplikasi. Mode latensi wilayah tanpa GC mengharuskan Anda menentukan jumlah memori yang dapat dialokasikan tanpa gangguan dari pengumpul sampah. Jika runtime dapat mengalokasikan memori tersebut, runtime tidak akan melakukan pengumpulan sampah saat kode di jalur kritis dijalankan.

Anda menentukan awal jalur kritis dari wilayah tanpa GC dengan memanggil salah satu kelebihan beban TryStartNoGCRegion. Anda menentukan akhir jalur kritisnya dengan memanggil EndNoGCRegion metode .

Anda tidak dapat menumpuk panggilan ke TryStartNoGCRegion metode , dan Anda hanya boleh memanggil EndNoGCRegion metode jika runtime saat ini tidak dalam mode latensi wilayah GC. Dengan kata lain, Anda tidak boleh memanggil TryStartNoGCRegion beberapa kali (setelah panggilan metode pertama, panggilan berikutnya tidak akan berhasil), dan Anda seharusnya tidak mengharapkan panggilan untuk EndNoGCRegion berhasil hanya karena panggilan TryStartNoGCRegion pertama berhasil.