Pengumpulan Sampah dan Manajemen Memori
Manajemen memori mengatur bagaimana program mengalokasikan dan mengklaim kembali memori; pengumpulan sampah mengotomatiskan pengklaiman kembali dengan mengidentifikasi dan membebaskan objek yang tidak lagi dapat dijangkau.
Definition
Manajemen memori adalah alokasi dan pengklaiman kembali memori program; pengumpulan sampah adalah pengklaiman kembali otomatis yang membebaskan memori yang ditempati oleh objek yang tidak dapat lagi dijangkau oleh program, membebaskan pemrogram dari dealokasi eksplisit.
Scope
Topik ini mencakup manajemen memori otomatis dan manual untuk runtime bahasa: penghitungan referensi, mark-and-sweep, penyalinan, dan pengumpulan generasional; penelusuran keterjangkauan; dan pertukaran antara throughput, waktu jeda, dan overhead memori. Ini membahas pengumpul konkuren dan inkremental serta hubungan antara strategi pengumpulan dan desain bahasa.
Core questions
- Bagaimana pengumpul menentukan objek mana yang masih dibutuhkan?
- Apa saja pertukaran antara throughput, latensi, dan jejak memori?
- Mengapa memisahkan objek berdasarkan usia (pengumpulan generasional) meningkatkan efisiensi?
- Bagaimana pengumpulan dapat menghindari jeda panjang dalam sistem interaktif atau waktu nyata?
Key theories
- Pengumpulan sampah pelacakan (Tracing garbage collection)
- McCarthy memperkenalkan pengumpulan sampah otomatis untuk Lisp, menetapkan gagasan untuk mengklaim kembali memori dengan melacak objek mana yang tetap dapat dijangkau dari akar program.
- Pengumpulan generasional (Generational collection)
- Lieberman dan Hewitt mengamati bahwa sebagian besar objek mati muda dan mengusulkan untuk mengumpulkan generasi yang lebih muda lebih sering, secara dramatis mengurangi biaya pengumpulan dalam praktiknya (hipotesis generasional).
- Taksonomi teknik pengumpulan
- Wilson dan Garbage Collection Handbook mengorganisir ruang desain penghitungan referensi, mark-sweep, penyalinan, pengumpul inkremental, dan konkuren serta pertukaran kinerja mereka.
Clinical relevance
Manajemen memori otomatis menghilangkan seluruh kelas bug seperti pointer yang menggantung (dangling pointers) dan kebocoran memori (memory leaks), itulah sebabnya sebagian besar bahasa tingkat tinggi mengandalkan pengumpulan sampah. Pilihan pengumpul sangat memengaruhi latensi dan throughput aplikasi, terutama untuk sistem interaktif dan server.
History
McCarthy memperkenalkan pengumpulan sampah dengan Lisp pada tahun 1960. Pengumpulan penyalinan (Cheney) dan penghitungan referensi menyusul, dan pengumpul generasional Lieberman dan Hewitt pada tahun 1983 memanfaatkan masa pakai objek. Dekade-dekade berikutnya menghasilkan pengumpul inkremental, konkuren, dan berbasis wilayah, yang disurvei secara komprehensif dalam karya Wilson tahun 1992 dan Garbage Collection Handbook tahun 2011.
Debates
- Pengumpulan otomatis versus manajemen manual atau berbasis kepemilikan
- Para desainer memperdebatkan pengumpulan sampah, yang aman dan nyaman tetapi dapat menimbulkan jeda dan overhead, versus manajemen manual atau berbasis kepemilikan, yang menawarkan kinerja yang dapat diprediksi dan jejak yang lebih rendah dengan biaya beban dan risiko pemrogram.
Key figures
- John McCarthy
- Henry Lieberman
- Carl Hewitt
- Richard Jones
- Paul Wilson
Related topics
Seminal works
- mccarthy1960
- lieberman1983
- wilson1992
- jones2011
Frequently asked questions
- Bagaimana pengumpul sampah mengetahui objek mana yang harus dibebaskan?
- Pengumpul pelacakan dimulai dari akar yang diketahui, seperti variabel tumpukan dan global, dan mengikuti referensi untuk menandai semua objek yang dapat dijangkau; apa pun yang tidak dijangkau tidak dapat dijangkau dan dapat diklaim kembali.
- Mengapa pengumpulan sampah generasional efektif?
- Karena sebagian besar objek menjadi tidak dapat dijangkau tak lama setelah alokasi, mengumpulkan generasi muda secara sering mengklaim kembali sebagian besar sampah dengan murah sementara objek yang lebih tua dan berumur panjang dipindai jauh lebih jarang.