Dalam bahasa pemrograman, suatu objek hanya dapat memiliki variabel selama keberadaannya, setelah instantiasi itu tidak dapat dimodifikasi. Jadi sel memori yang sama tidak dapat dialokasikan ke nilai-nilai baru, sehingga beberapa jenis manajemen memori otomatis diperlukan untuk mengelola ruang yang tidak digunakan. Ruang yang tidak digunakan ini disebut sampah dan seluruh proses manajemen memori yang efisien disebut pengumpulan sampah.
Tujuan utama seorang pemulung adalah untuk memisahkan benda mati dari benda hidup dan mendapatkan kembali ruang untuk digunakan kembali. Pada dasarnya, semuanya bekerja pada heap yang dikelola, yang tidak lain adalah blok memori dan pengumpul sampah secara berkala memeriksa memori tumpukan untuk mengalokasikan memori ke objek-objek baru. Ada dua metode untuk melepaskan sumber daya yang tidak dikelola seperti file dan koneksi database: Buang dan Selesaikan.
Artikel ini membantu Anda memahami perbedaan di antara keduanya.
Buang adalah cara standar bagi pengguna untuk memberi tahu objek untuk melepaskan sumber dayanya dan tidak mencoba mengakses objek lagi. Metode dispose menyediakan kontrol pembersihan memori eksplisit dengan menjadikan objek tidak dapat digunakan.
Ketika pengguna memanggil metode Buang (), objek seharusnya membebaskan semua sumber daya yang mahal sehingga membuatnya tersedia untuk digunakan kembali. Itu tidak pernah dipanggil oleh pemulung yang hanya datang untuk bermain ketika memori yang dikelola menjadi langka. Antarmuka khusus yang disebut "IDisposable" digunakan untuk memutuskan di mana dan bagaimana menerapkan Buang (). Tetapi apa yang terjadi ketika metode buang tidak dipanggil?
Jika metode buang tidak dipanggil, rencana cadangan adalah menggunakan metode Finalize () untuk pembersihan. Pemanggil sampah dipanggil untuk melakukan pembersihan sumber daya final sebelum membebaskan memori. Konsep pembersihan tepat waktu menjadi tidak berlaku di sini karena alih-alih mendelegasikan memori segera, objek ditambahkan ke antrian finalisasi hanya untuk dihancurkan kemudian. Finalisasi lebih seperti upaya perlindungan jika terjadi kesalahan pemrograman dan pembuangan tidak membersihkan sumber daya yang dalam hal ini metode Finalisasi () dipanggil oleh pengumpul sampah untuk menghapus objek yang tidak terjangkau dalam urutan apa pun yang diinginkannya..
Metode buang disebut untuk mempercepat pelepasan sumber daya yang tidak dikelola seperti pegangan basis data, pegangan file, semaphores, dan objek lain yang dialokasikan oleh sistem operasi. Metode buang dipanggil untuk mengeksekusi kode yang diperlukan untuk membersihkan memori yang tidak terpakai dan sumber daya yang langka seperti pegangan GDI. Secara sederhana, metode buang memberikan kontrol pembersihan memori eksplisit. Metode finalisasi, di sisi lain, adalah bagian dari pengumpulan sampah yang digunakan untuk melakukan operasi pembersihan akhir pada suatu objek sebelum dikumpulkan. Sederhananya, metode finalisasi dipanggil untuk membebaskan sumber daya yang tidak dikelola yang dimiliki oleh suatu objek sebelum dihancurkan.
Buang metode dapat dipanggil secara eksplisit oleh kode pengguna dan kelas yang menerapkan metode untuk membuang sumber daya. Namun, memori tidak dapat dilepaskan sampai pengumpul sampah melakukan proses pembersihan. Metode ini dapat dipanggil bahkan jika referensi lain ke objek masih ada. Metode finalisasi, sebaliknya, dapat dipanggil oleh pengumpul sampah hanya setelah menentukan bahwa instance objek memori terakhir dihancurkan dan tidak ada lagi referensi ke objek tersebut. Setelah metode penyelesaian dieksekusi, objek dihapus dari memori tumpukan.
Proses membuang objek dari memori disebut pola buang, yang dapat digunakan untuk objek yang mengakses sumber daya yang tidak dikelola karena pemulung tidak dapat mendapatkan kembali sumber daya yang tidak dikelola. Antarmuka "IDisposable" bersama dengan metode Buang tambahan (Boolean) diimplementasikan meminta pelepasan sumber daya yang tidak dikelola. Metode final dieksekusi ketika instance objek dihancurkan sebelum deallokasi. Ini adalah metode non-deterministik yang terjadi atas kebijakan pengumpul sampah dan bahkan mungkin tidak terjadi. Seharusnya tidak diimplementasikan pada objek yang dikelola sampai sangat diperlukan.
Jauh lebih cepat menggunakan metode buang daripada menyelesaikan untuk membuang benda secara instan. Destructors secara otomatis dikonversi ke finalisasi metode pada saat runtime. Itu secara otomatis dipanggil oleh pengumpul sampah ketika objek keluar dari ruang lingkup, yang biasanya terjadi ketika instance dari objek tersebut dihancurkan. Masalah dengan metode finalisasi adalah bahwa itu berarti non-deterministik dan tidak pasti kapan harus mendapatkan kembali memori yang tidak lagi dirujuk melalui pengumpulan sampah. Namun, ini mungkin tidak membebaskan memori segera; pada kenyataannya, itu mungkin tidak pernah dipanggil dan tidak bisa dipaksa secara eksplisit.
Perbedaan utama antara membuang dan menyelesaikan metode adalah bahwa yang pertama adalah metode deterministik yang langsung membuang objek ketika mereka tidak lagi digunakan, sedangkan yang terakhir adalah metode non-deterministik untuk mengalokasikan sumber daya yang tidak dikelola yang berarti itu adalah metode backstop untuk membebaskan contoh objek memori ketika mereka keluar dari ruang lingkup sebelum alokasi mereka. Itu selalu disarankan untuk menggunakan metode buang atas penyelesaian kecuali sangat diperlukan.
Dengan kata lain, finalisasi adalah upaya perlindungan untuk membersihkan sumber daya yang tidak dikelola ketika metode buang tidak dapat dipanggil jika terjadi kesalahan pemrograman. Metode final disebut oleh pengumpul sampah ketika sebuah objek akan dikeluarkan dari memori tumpukan.