"การคิดใน java" ฉบับที่ 4 หน้า 519 หน้าอ่อนแอบทที่อ่านบันทึกย่อการอ่านบันทึกย่อ
WeakHashMap ใช้เพื่อประหยัดค่าความอ่อนแอซึ่งเป็นโครงสร้างที่เรียกว่า Yunxun Garbage Collector ทำความสะอาดคีย์และค่าโดยอัตโนมัติ
เมื่อเพิ่มคีย์และค่าการแมปจะห่อหุ้มด้วยความอ่อนแอโดยอัตโนมัติ
ดูซอร์สโค้ด JDK
Public V Put (k key, v value) {object k = masknull (key); int h = hash (k); รายการ <k, v> [] tab = getTable (); int i = indexfor (h, tab.length); สำหรับ (รายการ <k, v> e = tab [i]; e! = null; e = e.next) oldValue = e.value; if (value! = oldValue) e.value = value; return oldValue;}} modcount ++; entry <k, v> e = tab [i]; tab [i] = รายการใหม่ <> (k, ค่า, คิว, h, e); new Entry<>(k, value, queue, h, e) ใช้ ReferenceQueue
/ ** * คิวอ้างอิงสำหรับการล้างจุดอ่อน */ ส่วนตัวอ้างอิงสุดท้าย <jobch> queue = new ReferenceQueue <> ();
คลิกตัวสร้าง new Entry เข้าสู่ระดับสูงสุดของ Super เพื่อดู
/** * สร้างการอ้างอิงที่อ่อนแอใหม่ที่อ้างถึงวัตถุที่กำหนดและคือ * ลงทะเบียนกับคิวที่กำหนด * * @param วัตถุอ้างอิงการอ้างอิงที่อ่อนแอใหม่จะอ้างถึง * @param q คิวที่จะลงทะเบียนการอ้างอิง * หรือ <tt> null </ tt> หากไม่จำเป็นต้องลงทะเบียน */ public feakreference (t Reference, ReferenceQueue <? super t> q) {super (อ้างอิง, q); - new Entry ที่นี่ยังสร้างวัตถุที่อ่อนแอ
ทดสอบ:
แพ็คเกจ com.anialy.test.data_structure.map; นำเข้า java.util.iterator; นำเข้า java.util.weakhashmap; คลาสสาธารณะ beakhashmaptest {public Static Void Main (String [] args) i = 0; wmap.keyset (). iterator (); ในขณะที่ (iter.hasnext ()) {system.out.println (wmap.get (iter.next ()));}}}เป็นที่คาดหวังว่าส่วนหนึ่งเนื่องจากสตริง [] ยังคงอ้างอิงที่อ่อนแอเอาต์พุตเป็นช่วงเวลาทั้งหมด 3
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการวิเคราะห์อินสแตนซ์ที่อ่อนแอของการเขียนโปรแกรม Java ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!