Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Nota
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-metode dalam kelas ini memengaruhi kapan pengumpulan sampah dilakukan pada objek dan kapan sumber daya yang dialokasikan oleh objek tersebut dilepaskan. Properti di kelas ini memberikan informasi tentang jumlah total memori yang tersedia dalam sistem dan kategori usia, atau generasi, 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:
- Pengumpul sampah mencari objek terkelola yang dirujuk dalam kode terkelola.
- Pengumpul sampah mencoba memfinalisasi objek yang tidak direferensikan.
- Pengumpul sampah membebaskan objek yang tidak direferensikan dan mengambil 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 akan membebaskan objek yang digunakan secara eksklusif dalam kode tersebut kecuali dicegah secara eksplisit. 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 tipe menggunakan sumber daya yang tidak terkelola yang harus dirilis sebelum instansinya direklamasi, tipe tersebut dapat mengimplementasikan finalizer.
Dalam kebanyakan kasus, finalizer diimplementasikan dengan mengesampingkan metode Object.Finalize; namun, jenis yang ditulis dalam C# atau C++ memiliki destruktor yang diubah oleh kompilator menjadi penggantian metode Object.Finalize. Dalam kebanyakan kasus, jika objek memiliki finalizer, pemungut sampah akan memanggilnya sebelum membebaskan objek. Namun, pengumpul sampah tidak diharuskan untuk memanggil finalizer dalam semua situasi; misalnya, metode SuppressFinalize ini secara eksplisit mencegah pemanggilan finalizer objek. Selain itu, pengelola sampah tidak diharuskan menggunakan utas tertentu untuk mengakhiri objek, atau menjamin urutan pemanggilan finalizer untuk objek yang saling merujuk namun 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 generasi objek
Pengumpul sampah otomatis dalam common language runtime mendukung penuaan objek menggunakan generasi. Generasi adalah satuan ukuran usia relatif objek dalam memori. Nomor generasi, atau usia, sebuah objek menunjukkan generasi tempat objek tersebut termasuk. 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 properti MaxGeneration untuk menentukan jumlah generasi 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.