Dalam bahasa pengaturcaraan, objek hanya boleh berubah semasa kewujudannya, selepas instantiasi ia tidak boleh diubah suai. Sel memori yang sama tidak dapat diperuntukkan kepada nilai-nilai baru, oleh itu beberapa jenis pengurusan memori automatik diperlukan untuk menguruskan ruang yang tidak digunakan. Ruang yang tidak digunakan ini dipanggil sampah dan keseluruhan proses pengurusan memori yang cekap dipanggil pengumpulan sampah.
Tujuan utama pengumpul sampah adalah memisahkan objek mati dari benda hidup dan menuntut kembali ruang untuk digunakan kembali. Pada dasarnya, keseluruhan perkara ini berfungsi pada timbunan yang dikendalikan, yang mana hanyalah blok memori dan pengumpul sampah secara berkala memeriksa memori timbunan untuk mengagihkan memori ke objek baru. Terdapat dua cara untuk melepaskan sumber yang tidak dikawal seperti fail dan sambungan pangkalan data: Lupuskan dan Akhiri.
Artikel ini membantu anda memahami perbezaan di antara keduanya.
Lupuskan adalah cara yang standard untuk pengguna memberitahu objek untuk melepaskan sumber mereka dan tidak cuba untuk mengakses objek lagi. Kaedah buang menyediakan kawalan pembersihan ingatan yang eksplisit dengan menjadikan objek tidak dapat digunakan.
Apabila pengguna memanggil kaedah Dispose (), objek itu sepatutnya membebaskan semua sumber daya yang mahal sehingga menjadikannya tersedia untuk digunakan semula. Ia tidak pernah dipanggil oleh pengumpul sampah yang hanya datang untuk bermain apabila memori yang dikendalikan menjadi terhad. Antara muka khas yang dipanggil "IDisposable" digunakan untuk menentukan di mana dan bagaimana untuk melaksanakan Buang (). Tetapi apa yang berlaku apabila kaedah buang tidak dipanggil?
Sekiranya kaedah buang tidak dipanggil, pelan sandaran adalah menggunakan kaedah Finalize () untuk pembersihan. Ia dipanggil oleh pengumpul sampah untuk melakukan pembersihan sumber akhir sebelum membebaskan memori. Konsep pembersihan yang tepat pada masanya menjadi tidak dapat diterapkan di sini kerana bukannya mengalokasikan memori dengan serta-merta, objek tersebut ditambahkan pada baris gilir akhir untuk dimusnahkan kemudian. Memuktamadkan adalah lebih seperti perlindungan diletakkan di tempat sekiranya berlaku ralat pengaturcaraan dan melupuskannya tidak membersihkan sumber-sumber di mana kes Finalis () dipanggil oleh pemungut sampah untuk menghilangkan objek yang tidak dapat dicapai dalam apa jua urutan yang disukai.
Kaedah buang dipanggil untuk mempercepatkan pengeluaran sumber tidak dikawal seperti pengendalian pangkalan data, pemegang fail, semaphore, dan objek lain yang diperuntukkan oleh sistem pengendalian. Kaedah buang digunakan untuk melaksanakan kod yang diperlukan untuk membersihkan memori yang tidak digunakan dan kekurangan sumber seperti GDI menangani. Secara ringkas, kaedah buang akan memberikan kawalan ke atas pembersihan memori yang jelas. Kaedah akhir, sebaliknya, adalah sebahagian daripada pengumpulan sampah yang digunakan untuk melakukan operasi pembersihan akhir pada objek sebelum sampah itu dikumpulkan. Secara ringkas, kaedah akhir dipanggil untuk membebaskan sumber yang tidak dikawal oleh objek sebelum ia dimusnahkan.
Kaedah buang boleh dipanggil dengan jelas oleh kod pengguna dan kelas yang melaksanakan kaedah untuk membuang sumber. Walau bagaimanapun, memori tidak dapat dikeluarkan sehingga pengumpul sampah melakukan proses pembersihan. Kaedah ini boleh dipanggil walaupun rujukan lain ke objek masih wujud. Kaedah akhir, sebaliknya, boleh digunakan oleh pengumpul sampah hanya selepas ia menentukan bahawa objek objek memori terakhir dimusnahkan dan tidak ada rujukan lagi untuk objek itu. Selepas kaedah akhir disempurnakan, objek dibuang dari ingatan tumpukan.
Proses melupuskan objek dari ingatan dipanggil corak buang, yang boleh digunakan untuk objek yang mengakses sumber yang tidak diurus kerana pengumpul sampah tidak dapat menuntut semula sumber yang tidak dikelola. Antara muka "IDisposable" bersama-sama dengan kaedah Buang tambahan (Boolean) dilaksanakan meminta pembebasan sumber tidak dikawal. Kaedah yang dimuktamadkan dilaksanakan apabila contoh objek dimusnahkan sebelum deallocationnya. Ini adalah kaedah yang tidak menentukan yang terjadi pada budi bicara pengumpul sampah dan tidak mungkin berlaku. Ia tidak seharusnya dilaksanakan pada objek yang diuruskan sehingga sangat diperlukan.
Ia lebih pantas menggunakan kaedah buang dan bukannya diselesaikan untuk pelupusan objek segera. Pemusnahan secara automatik ditukarkan untuk memuktamadkan kaedah semasa runtime. Ia secara automatik dipanggil oleh pengumpul sampah apabila objek keluar dari skop, yang biasanya berlaku apabila contoh objek itu dimusnahkan. Masalah dengan kaedah akhir adalah bahawa ia bukan arti definitif yang tidak pasti apabila untuk memulihkan ingatan yang tidak lagi dirujuk melalui pengumpulan sampah. Walau bagaimanapun, ia mungkin tidak mengizinkan memori dengan segera; sebenarnya, ia tidak boleh dipanggil dan ia tidak boleh dipaksa secara eksplisit.
Perbezaan utama antara melupuskan dan memuktamadkan kaedah adalah bahawa kaedah pertama adalah kaedah deterministik yang secara langsung membuang objek apabila ia tidak lagi digunakan, sementara yang terakhir adalah kaedah non-deterministik untuk memperuntukkan sumber yang tidak dikendalikan yang bermaksud kaedah backstop untuk membebaskan contoh objek ingatan ketika mereka keluar dari skop sebelum deallocation mereka. Adalah dinasihatkan untuk menggunakan kaedah melupuskan untuk diselesaikan kecuali perlu.
Dalam istilah lain, dimuktamadkan adalah perlindungan yang disediakan untuk membersihkan sumber yang tidak diurus apabila kaedah buang tidak boleh dipanggil sekiranya ada ralat pengaturcaraan. Kaedah akhir dipanggil oleh pengumpul sampah apabila sesuatu objek hendak ditendang keluar dari memori tumpukan.