Saya sudah lama tidak membaca buku tentang Java. Baru -baru ini, saya membaca bahasa pemrograman James Gosling << Java >> dan membuat beberapa catatan membaca. Bagian ini adalah tentang daur ulang sampah.
1. Recycling sampah
Objek dibuat menggunakan yang baru, tetapi tidak ada operasi penghapusan yang sesuai untuk mendaur ulang memori yang ditempati oleh objek. Ketika kita menyelesaikan penggunaan objek, kita hanya perlu menghentikan referensi ke objek itu:
-> Ubah referensi ke titik ke objek lain
-> arahkan referensi ke null
-> kembali dari metode sehingga variabel lokal dari metode ini tidak ada lagi
Poin -Poin Kunci:
-> Ketika kita tidak dapat mencapai objek dari kode yang dapat dieksekusi, ruang yang dibutuhkan dapat didaur ulang.
-> Recycling sampah berarti kita tidak perlu khawatir tentang referensi yang menggantung. Referensi palsu mengacu pada referensi ke ruang memori yang telah dihapus. Masalah ini ada dalam sistem di mana pemrogram dapat secara langsung mengontrol ketika objek dihapus.
-> Model Kolektor Sampah: Metode penghitung referensi (tidak dapat menyelesaikan referensi melingkar), Mark-and-Sheep.
2. Ringkasan
Finalisasi metode
-> Setelah pengumpul sampah menentukan bahwa objek tersebut tidak dapat dijangkau dan bahwa ruang objek akan didaur ulang, pengumpul sampah akan memanggil metode ini.
-> Metode ini dapat menghapus semua sumber daya non-memori yang digunakan oleh objek, dan hanya dapat dipanggil sekali untuk setiap objek. Bahkan jika pelaksanaan metode ini membuat objek dapat dijangkau lagi dan kemudian segera menjadi tidak terjangkau lagi, metode ini hanya dapat dipanggil sekali.
Metode -> finalisasi dapat dipanggil dalam periode waktu tertentu, dan mungkin tidak pernah disebut (mesin virtual Java berakhir).
Mengganti metode finalisasi
-> Ketika suatu objek menjadi sampah, objek lain yang dimaksud juga cenderung menjadi sampah. Sampah ini mungkin telah diakhiri sebelum memanggil metode finalisasi yang kami tulis, sehingga mereka mungkin berada dalam keadaan yang tidak terduga.
-> Timpa metode finalisasi adalah menambahkan metode super.finalize. Yang terbaik adalah menambahkannya di kalimat akhirnya. Pastikan bahwa beberapa konten yang dinyatakan dalam superclassnya juga dapat diakhiri.
AKU AKU AKU. Kelas dan metode terkait untuk berinteraksi dengan pengumpul sampah
Kelas: runtime.getRuntime (), sistem
Metode: GC (), runfinalisasi (), freememory (), totalMemory (), maxMemory ()
Kelas sistem mendukung metode statis GC () dan runfinalisasi (), yang akan memanggil metode yang sesuai pada objek runtime saat ini.
Iv. Status aksesibilitas dan objek referensi
Suatu objek hanya dapat dikumpulkan sampah ketika tidak ada referensi yang menentukannya, tetapi kadang -kadang kita mungkin ingin mengumpulkan objek sebagai sampah ketika masih ada referensi yang dipilih yang menunjuk ke objek.
Satu -satunya tujuan objek referensi adalah untuk mempertahankan referensi ke objek lain yang disebut referensi. Biasanya kita mempertahankan referensi ke objek melalui bidang atau variabel lokal, tetapi sekarang kita dapat mempertahankan referensi langsung ke objek referensi, yang membungkus objek yang sebenarnya kita butuhkan. Kolektor sampah dapat menentukan apakah referensi residual ke suatu objek dirujuk ke objek melalui wajah objek referensi, sehingga dapat memutuskan apakah akan mendaur ulang objek. Kekuatan objek referensi akan menentukan perilaku pengumpul sampah, dan referensi biasa adalah referensi yang paling kuat.
Kelas referensi
-> Paket: java.lang.ref
-> Metode Khas: get (), clear (), enqueue (), isenqueued ()
Kekuatan Kutipan dan Aksesibilitas
-> Objek sangat dapat dijangkau: referensi biasa
-> Objek dapat dijangkau dengan lembut: Softreference
-> Objek dapat dicapai dengan lemah: Lemah Referensi
-> Objek dapat diakses (Phantom dapat dijangkau): Phantomreference
-> Objek tidak terjangkau: Tidak ada tautan referensi setelah objek menjadi lemah (atau kolom lemah), itu dapat diakhiri. Jika objek tidak dapat dijangkau setelah penghentian, itu dapat didaur ulang.
Fase jangkauan objek memicu pengumpul sampah untuk melakukan perilaku yang tepat pada jenis objek referensi yang relevan:
-> Objek yang dapat dijangkau lunak mungkin diizinkan untuk didaur ulang oleh pengumpul sampah. Yang bisa kita yakin adalah bahwa semua softreferensi untuk objek Softreference akan dibersihkan sebelum melemparkan kesalahan outofmemoryError.
-> Objek yang dapat diakses dengan baik akan didaur ulang oleh pengumpul sampah.
-> Objek yang dapat dijangkau virtual tidak benar -benar dapat dijangkau, karena objek referensialnya tidak dapat diakses melalui phantomreference, dan metode GET selalu mengembalikan nol. Tetapi keberadaan referensi virtual dapat mencegah objek dari didaur ulang sebelum secara eksplisit membersihkan referensi virtual. Referensi virtual memungkinkan kita untuk menangani objek yang metode finakinya telah dipanggil, membuatnya aman untuk berpikir bahwa mereka "mati".