Jawaban:
Ini akan menangani masalah manajemen memori klasik (memori yang dialokasikan tidak mengalami deacllocated ketika tidak lagi digunakan), meskipun masih mungkin untuk memiliki kebocoran memori dengan sistem GC - ini akan lebih halus dan akan terjadi ketika benda masih memegang referensi ke objek lain, bahkan ketika mereka tidak perlu lagi.
Lihat pertanyaan. Mengapa NET tidak memiliki kebocoran memori? dan jawabannya di StackOverflow.
Mungkin ada x. situasi ketika Anda ingin kontrol penuh atas alokasi memori, tetapi terus terang, manfaat sistem GC sedemikian rupa sehingga Anda biasanya tidak perlu melakukannya.
Ada banyak masalah memori (menggantung pointer, buffer overruns dan sejenisnya) dan masalah sumber daya (kebocoran memori, kebocoran sumber daya lainnya). Pengumpul sampah mengurus:
Bahasa yang tidak mengizinkan aritmatika pointer menangani:
Tidak ada yang dapat menyelesaikan kasus lain dari masalah sumber daya di mana Anda lupa menghapus referensi ke memori / sumber daya dari suatu tempat, sehingga Anda masih dapat memiliki kebocoran memori dengan GC (objek Pengecualian sangat penting untuk merujuk banyak hal yang tidak Anda sadari).
Sementara GC dapat membantu Anda dengan melepaskan sumber daya selain memori dengan menggunakan finalizers (destructors), ia akan melepaskan sumber daya tersebut dengan penundaan non-deterministik, yang seringkali tidak sesuai untuk sumber daya seperti file atau soket jaringan. Untuk menangani masalah sumber daya semacam ini, Anda memerlukan beberapa konstruksi bahasa untuk sumber daya yang dicakup, seperti menggunakan pernyataan dalam C #, idiom RAII dalam C ++ atau ekstensi terbaru untuk mencoba sintaksis di Java 7 dan itu masih hanya membantu, karena Anda perlu menggunakannya dalam kode .
Diperlukan aritmatika penunjuk dan pembuatan alamat dari angka diperlukan untuk dapat menjalankan pemulung yang tepat. Beberapa optimasi bermanfaat seperti pemadatan hanya dapat diimplementasikan dalam kolektor yang tepat (Anda hanya dapat memindahkan objek jika Anda dapat mengetahui dengan pasti apa itu referensi, sehingga Anda dapat memperbaruinya; Anda tidak dapat melakukannya di C / C ++).
Pengumpulan sampah berfungsi dengan baik untuk memori. Jika Anda memiliki banyak memori, mengapa harus membersihkan setiap byte seperti yang dilakukan? GC biasanya merespons "tekanan memori" dan membersihkan bila diperlukan. Ini adalah hal yang baik untuk diingat. Namun, jika Anda memiliki objek yang menyimpan sumber daya non-memori (pegangan file, koneksi database, kunci) menunggu sampai tekanan memori memicu GC umumnya berarti menahan sumber daya terlalu lama. Anda memerlukan pendekatan lain untuk sumber daya tersebut. Itu mungkin berarti referensi penghitungan sumber daya bersama, dengan rilis deterministik ketika jumlah referensi mencapai nol, atau menggunakan / Buang pendekatan .NET.
Sistem GC adalah perangkat lunak yang berupaya mengoptimalkan penggunaan memori untuk program yang sedang berjalan.
Sistem GS adalah tanggung jawab dan merupakan komponen kerangka kerja (JVM / .NET).
Ini dapat membebaskan memori untuk beberapa objek yang diprediksi tidak diperlukan oleh aplikasi setelah titik tertentu dalam pemrosesan.
Dalam. NET hanya dapat membebaskan memori untuk beberapa objek .NET asli dan bukan untuk objek MS COM.
Objek MS COM yang digunakan dalam .NET harus dibebaskan secara eksplisit.
Referensi: