??     ???Effective Java 2nd Edition???У???6??“????????????????”???????Java????????????????????????????????棬??t??????й??????????????????????е????????п??????????й??????????л?????????WeakHashMap????????????????????Ч???????????????????????????????????н????“??????”??????????????????Щ?????

??????Java ??????????? ?????????????й???????????????????Map?????????????????????й?????????????????hprof????????????й???????????????????????????????й???????????WeakHashMap????????????вο??????????????????????????????????????????????????????????????????????????

????1??????????

??????JDK1.2?汾??????????????÷????????????????????????????????????????????????????????????????????á??????á??????ú??????á?

?????????????????????????磺Object object=new Object????????object????????????????????????????????????????????????????????????????????????????????????? ????Java???????????OutOfMemoryError???????????????????????????????????????????????治??????

???????????SoftReference????????????????????????????????????п??????????????????????????????????????????????????????????????????Щ???????檔??????????????л??????????????????????á????????????????????е??????檔 ???????????????????У?ReferenceQueue??????????????????????????????????????Java????????????????ü????????????????????С?

???????????WeakReference????????????????????????????????????п??????????????????????????????????????????????????????и??????????????????????????????????? ???????????????????У??????????????????????????????????????????????????????檔?????????????????????????????????????? ???????????????Щ???????????????  ???????????????????У?ReferenceQueue??????????????????????????????????????Java????????????????ü????????????????????С?

???????????PhantomReference????“??????”??????壬????????裬?????????????????????????ò???????????????????????????????????????????????????????κ?????????????κ?????????????????? ?????????????????????????????????????????????ú????????????????????????????????????? ??ReferenceQueue????????á??????????????????????????????????????????????????????????????????????????????ü?????? ??????????????С????????????ж????????????????????????????????????????????????????????????????????????????????????????????У???????????????????????汻???????????????ж???

????2??WeakHashMap??????

????WeakHashMap????????ReferenceQueue???????????д????????Key????


private final ReferenceQueue<K> queue = new ReferenceQueue<K>();


????WeakHashMap.Entry<K??V>?в???б???Key??????Key??ReferenceQueue?????????


private static class Entry<K??V> extends WeakReference<K> implements Map.Entry<K??V> {
         private V value;
         private final int hash;
         private Entry<K??V> next;
 
         Entry(K key?? V value?? ReferenceQueue<K> queue?? int hash?? Entry<K??V> next) {
             super(key?? queue);
             this.value = value;
             this.hash  = hash;
             this.next  = next;
         }
         ……