Apa——Apakah rujukan yang lemah?
Rujukan lemah dalam Java secara khusus merujuk kepada kelas java.lang.ref.WeakReference
Andaikan pemungut sampah menentukan pada masa tertentu bahawa objek lemah boleh dicapai (iaitu, semua titik semasa yang menunjuk kepadanya adalah rujukan lemah), maka pemungut sampah akan Kosongkan semua rujukan yang lemah ke objek, dan kemudian tandakan objek yang boleh dicapai dengan lemah sebagai boleh dimuktamadkan supaya ia akan dikitar semula kemudian. Pada masa yang sama atau kemudian, pemungut sampah akan meletakkan rujukan lemah yang baru sahaja dikosongkan ke dalam baris gilir rujukan (Reference Queue) yang ditentukan semasa mencipta objek rujukan yang lemah.
Sebenarnya, terdapat empat jenis rujukan dalam Java, iaitu daripada kuat kepada lemah ialah: rujukan kuat, rujukan lembut, rujukan lemah dan rujukan maya. Di bawah ini kami memperkenalkan secara ringkas tiga jenis rujukan yang lain kecuali rujukan yang lemah:
Pertimbangkan senario berikut: Kini terdapat kelas Produk yang mewakili produk Kelas ini direka bentuk untuk tidak boleh dilanjutkan, dan pada masa ini kami mahu menambah nombor pada setiap produk . Satu penyelesaian ialah menggunakan HashMap
Jadi dalam kes ini, jika kita ingin benar-benar mengitar semula objek Produk, tidak cukup dengan hanya memberikan rujukan kukuhnya kepada null, tetapi juga untuk mengalih keluar masukan yang sepadan daripada HashMap. Jelas sekali kami tidak mahu melakukan kerja "mengalih keluar entri yang tidak diperlukan lagi daripada HashMap" sendiri Kami ingin memberitahu pemungut sampah bahawa apabila hanya kekunci dalam HashMap merujuk kepada objek Produk, objek Produk yang sepadan boleh menjadi. dikitar semula. Jelas sekali, menurut definisi rujukan lemah sebelum ini, menggunakan rujukan yang lemah boleh membantu kita mencapai matlamat ini. Kita hanya perlu menggunakan objek rujukan lemah yang menunjuk ke objek Produk sebagai kunci dalam HashMap.
Bagaimana——Bagaimana untuk menggunakan rujukan yang lemah?
Ambil senario yang diterangkan di atas sebagai contoh Kami menggunakan objek rujukan yang lemah yang menunjuk ke objek Produk sebagai kunci HashMap Kami hanya perlu mentakrifkan objek rujukan yang lemah seperti ini :
Produk produkA = Produk baharu(...);
WeakReferenceweakProductA = WeakReference<>(productA); Sekarang, jika objek weakProductA dirujuk Ia menunjuk kepada Product object productA. Jadi bagaimana kita mendapatkan produk objek ProdukA yang ditunjukkannya melalui weakProduct? Ia sangat mudah. Anda hanya memerlukan kod berikut:
Product product = weakProductA.get();
Malah, untuk situasi ini, perpustakaan kelas Java menyediakan kami kelas WeakHashMap, yang boleh digunakan dengan kelas ini, kuncinya secara semula jadi adalah objek rujukan yang lemah, dan kita tidak perlu membungkus objek asal secara manual. Dengan cara ini, apabila productA menjadi batal (menunjukkan bahawa Produk yang dirujuknya tidak perlu lagi wujud dalam ingatan), objek rujukan lemah weakProductA menunjuk ke objek Produk Jelas sekali, objek Produk yang sepadan adalah lemah pada masa ini. jadi rujukan lemah yang menunjuk kepadanya akan dikosongkan, objek Produk akan dikitar semula serta-merta, dan objek rujukan lemah yang menunjuk kepadanya akan memasuki baris gilir rujukan.
Barisan Rujukan
Mari perkenalkan secara ringkas konsep baris gilir rujukan. Malah, kelas WeakReference mempunyai dua pembina:
//创建一个指向给定对象的弱引用 WeakReference(T referent) //创建一个指向给定对象并且登记到给定引用队列的弱引用 WeakReference(T referent, ReferenceQueue<? super T> q)
Atas ialah kandungan terperinci Mempelajari dan memahami rujukan lemah Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!