Perbedaan antara membuang dan menyelesaikan
- 3650
- 1178
- Homer Hartmann
Dalam bahasa pemrograman, suatu objek hanya dapat memiliki variabel selama keberadaannya, setelah instantiasi tidak dapat dimodifikasi. Jadi sel memori yang sama tidak dapat dialokasikan untuk nilai -nilai baru, sehingga semacam manajemen memori otomatis diperlukan untuk mengelola ruang yang tidak digunakan. Ruang -ruang yang tidak digunakan ini disebut sampah dan seluruh proses manajemen memori yang efisien disebut pengumpulan sampah.
Tujuan utama pengumpul sampah adalah untuk memisahkan benda mati dari benda -benda hidup dan merebut kembali ruang untuk digunakan kembali. Pada dasarnya, semuanya bekerja pada tumpukan terkelola, yang tidak lain adalah blok memori dan pengumpul sampah secara berkala memeriksa memori heap untuk mengalokasikan memori ke objek baru. Ada dua metode untuk merilis sumber daya yang tidak dikelola seperti file dan koneksi basis data: membuang dan menyelesaikan.
Artikel ini membantu Anda memahami perbedaan antara keduanya.
Apa itu metode pembuangan?
Buang adalah cara standar bagi pengguna untuk memberi tahu objek untuk melepaskan sumber daya mereka dan tidak mencoba mengakses objek lagi. Metode Dispose memberikan kontrol pembersihan memori eksplisit dengan membuat objek tidak dapat digunakan.
Ketika pengguna memanggil metode Dispose (), objek seharusnya membebaskan semua sumber daya mahal sehingga membuatnya tersedia untuk digunakan kembali. Itu tidak pernah dipanggil oleh pengumpul sampah yang hanya datang untuk bermain ketika memori yang dikelola menjadi langka. Antarmuka khusus yang disebut "Idisposable" digunakan untuk memutuskan di mana dan bagaimana menerapkan Dispose (). Tapi apa yang terjadi ketika metode buang tidak dipanggil?
Apa itu metode finalisasi?
Jika metode buang tidak dipanggil, rencana fallback adalah menggunakan metode finalisasi () untuk pembersihan. Itu disebut oleh pengumpul sampah untuk melakukan pembersihan sumber daya akhir sebelum membebaskan memori. Konsep pembersihan tepat waktu menjadi tidak dapat diterapkan di sini karena alih-alih menyegarkan memori segera, objek ditambahkan ke antrian finalisasi hanya untuk dihancurkan nanti. Finalisasi lebih seperti perlindungan yang diberlakukan jika terjadi kesalahan pemrograman dan pembuangan tidak membersihkan sumber daya dalam hal ini metode finalisasi () dipanggil oleh pengumpul sampah untuk menghapus objek yang tidak dapat dijangkau dalam urutan apa pun yang disukainya.
Perbedaan antara membuang dan menyelesaikan
Dasar -dasar membuang dan menyelesaikan
Metode buang dipanggil untuk mempercepat pelepasan sumber daya yang tidak dikelola seperti pegangan basis data, pegangan file, semafor, dan objek lain yang dialokasikan oleh sistem operasi. Metode Buangan Dipanggil untuk Mengeksekusi Kode yang Diperlukan untuk Membersihkan Memori yang Tidak Terkecil dan Sumber Daya Langka Seperti GDI. Secara sederhana, metode buang memberikan kontrol pembersihan memori eksplisit. Finalisasi metode, di sisi lain, adalah bagian dari pengumpulan sampah yang digunakan untuk melakukan operasi pembersihan akhir pada suatu objek sebelum dikumpulkan sampah. Sederhananya, metode finalisasi dipanggil untuk membebaskan sumber daya yang tidak dikelola yang dipegang oleh suatu objek sebelum dihancurkan.
Memohon buang dan menyelesaikan
Metode buang dapat disebut secara eksplisit oleh kode pengguna dan kelas yang mengimplementasikan 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 yang ada. Setelah metode finalisasi dieksekusi, objek dihapus dari memori heap.
Implementasi buang dan selesaikan
Proses membuang objek dari memori disebut pola buang, yang dapat digunakan untuk objek yang mengakses sumber daya yang tidak dikelola karena pengumpul sampah tidak dapat merebut kembali sumber daya yang tidak dikelola. Antarmuka "Idisposable" bersama dengan metode tambahan Dispose (Boolean) diterapkan meminta rilis sumber daya yang tidak dikelola. Metode finalisasi dieksekusi ketika instance suatu objek dihancurkan sebelum deallokasi. Ini adalah metode non-deterministik yang terjadi atas kebijaksanaan pengumpul sampah dan bahkan mungkin tidak terjadi. Itu tidak boleh diimplementasikan pada objek yang dikelola sampai sangat diperlukan.
Kinerja membuang dan menyelesaikan
Jauh lebih cepat menggunakan metode buang daripada menyelesaikan untuk pembuangan objek instan. Destructor secara otomatis dikonversi untuk menyelesaikan metode saat runtime. Secara otomatis dipanggil oleh pengumpul sampah ketika objek keluar dari ruang lingkup, yang biasanya terjadi ketika contoh objek itu dihancurkan. Masalah dengan metode finalisasi adalah bahwa itu adalah artinya non-deterministik tidak pasti kapan harus merebut kembali memori yang tidak lagi dirujuk melalui pengumpulan sampah. Namun, itu mungkin tidak langsung memori segera; Faktanya, itu mungkin tidak pernah dipanggil dan tidak dapat dipaksakan secara eksplisit.
Buang vs. Finalisasi: Bagan Perbandingan
Ringkasan Dispose vs Finalisasi
Perbedaan utama antara menghilangkan 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 deallokasi mereka. Selalu disarankan untuk menggunakan metode pembuangan selama finalisasi kecuali sangat diperlukan.
Dalam istilah lain, finalisasi adalah perlindungan yang diberlakukan untuk membersihkan sumber daya yang tidak dikelola saat metode buang tidak dapat dipanggil jika terjadi beberapa kesalahan pemrograman. Metode finalisasi dipanggil oleh pengumpul sampah ketika suatu objek akan diusir dari heap memori.