.NET Core - Pengumpulan Sampah
Dalam bab ini, kita akan membahas konsep pengumpulan Sampah yang merupakan salah satu fitur terpenting dari platform kode yang dikelola .NET. Pengumpul sampah (GC) mengelola alokasi dan pelepasan memori. Pengumpul sampah berfungsi sebagai pengelola memori otomatis.
Anda tidak perlu mengetahui cara mengalokasikan dan melepaskan memori atau mengelola masa pakai objek yang menggunakan memori tersebut
Alokasi dibuat setiap kali Anda mendeklarasikan objek dengan kata kunci "baru" atau jenis nilai dikotakkan. Alokasi biasanya sangat cepat
Jika tidak ada cukup memori untuk mengalokasikan objek, GC harus mengumpulkan dan membuang memori sampah agar memori tersedia untuk alokasi baru.
Proses ini dikenal sebagai garbage collection.
Keuntungan Pengumpulan Sampah
Pengumpulan Sampah memberikan manfaat sebagai berikut -
Anda tidak perlu mengosongkan memori secara manual saat mengembangkan aplikasi Anda.
Ini juga mengalokasikan objek di heap terkelola secara efisien.
Saat objek tidak lagi digunakan, objek tersebut akan diambil kembali dengan mengosongkan memorinya, dan membuat memori tetap tersedia untuk alokasi di masa mendatang.
Objek yang dikelola secara otomatis mendapatkan konten bersih untuk memulai, sehingga konstruktornya tidak perlu menginisialisasi setiap bidang data.
Ini juga memberikan keamanan memori dengan memastikan bahwa suatu objek tidak dapat menggunakan konten objek lain.
Ketentuan Pengumpulan Sampah
Pengumpulan sampah terjadi jika salah satu dari kondisi berikut ini benar.
Sistem memiliki memori fisik yang rendah.
Memori yang digunakan oleh objek yang dialokasikan di heap terkelola melampaui ambang batas yang dapat diterima. Ambang batas ini terus menerus disesuaikan saat proses berjalan.
Itu GC.Collectmetode ini dipanggil dan di hampir semua kasus, Anda tidak perlu memanggil metode ini, karena pengumpul sampah terus berjalan. Metode ini terutama digunakan untuk situasi dan pengujian unik.
Generasi
Pengumpul Sampah .NET memiliki 3 generasi dan setiap generasi memiliki heapnya sendiri yang digunakan untuk penyimpanan objek yang dialokasikan. Ada prinsip dasar bahwa kebanyakan benda berumur pendek atau berumur panjang.
Generasi Pertama (0)
Di Generasi 0, objek dialokasikan pertama kali.
Dalam generasi ini, objek sering kali tidak melewati generasi pertama, karena tidak lagi digunakan (di luar cakupan) saat pengumpulan sampah berikutnya terjadi.
Generasi 0 cepat dikumpulkan karena heap terkaitnya kecil.
Generasi Kedua (1)
Di Generasi 1, objek memiliki ruang kesempatan kedua.
Objek yang berumur pendek tetapi bertahan dari koleksi generasi 0 (sering kali didasarkan pada waktu kebetulan) pergi ke generasi 1.
Koleksi Generasi 1 juga cepat karena heap yang terkait juga kecil.
Dua tumpukan pertama tetap kecil karena objek dikumpulkan atau dipromosikan ke tumpukan generasi berikutnya.
Generasi Ketiga (2)
Di Generasi 2, semua objek panjang hidup dan tumpukannya bisa tumbuh menjadi sangat besar.
Objek dalam generasi ini dapat bertahan lama dan tidak ada tumpukan generasi berikutnya untuk mempromosikan objek lebih lanjut.
Pengumpul Sampah memiliki tumpukan tambahan untuk objek besar yang disebut Large Object Heap (LOH).
Ini dicadangkan untuk objek yang berukuran 85.000 byte atau lebih besar.
Objek besar tidak dialokasikan ke heap generasi tetapi dialokasikan langsung ke LOH
Koleksi Generasi 2 dan LOH memerlukan waktu yang cukup lama untuk program yang telah berjalan lama atau beroperasi pada sejumlah besar data.
Program server besar diketahui memiliki tumpukan dalam 10s GB.
GC menggunakan berbagai teknik untuk mengurangi jumlah waktu yang menghalangi pelaksanaan program.
Pendekatan utamanya adalah melakukan pekerjaan pengumpulan sampah sebanyak mungkin pada thread latar belakang dengan cara yang tidak mengganggu eksekusi program.
GC juga memaparkan beberapa cara bagi pengembang untuk memengaruhi perilakunya, yang bisa sangat berguna untuk meningkatkan kinerja.