?????嵥 4 ???? hprof ??????????????????? Map.Entry ????????????????????????????????????Щ???????????? Map.Entry ???????????Щ???????????????й????????????????????

?????嵥 4. HPROF ???????? Map.Entry ?????????


TRACE 300446:
 java.util.HashMap$Entry.(:Unknown line)
 java.util.HashMap.addEntry(:Unknown line)
 java.util.HashMap.put(:Unknown line)
 java.util.Collections$SynchronizedMap.put(:Unknown line)
 com.quiotix.dummy.MapLeaker.newTask(MapLeaker.java:48)
 com.quiotix.dummy.MapLeaker.main(MapLeaker.java:64)
???????????????

????SocketManager ???????? Socket-User ????????????????? Socket ?????????????????????????????κ??????????????????????ó????ò??????????????????????????????? JDK 1.2 ?????????????????????????????????????????????????????????????????????????????????????й? —— ?????????á?

??????????????????????? referent???????????????????????ú????????? referent ?????????????????????????????????????????????????????????????????????????????????? referent ?????????????????????????κ????????????????????????????????????????????????????????????????weakly reachable??????

????WeakReference ?? referent ??????????????????б?????????????? get() ???????????????????????????????? referent ???????????????????????????? WeakReference.clear()????get() ???? null?????????????????????????????? get() ?????????? null ?????? referent ?????????????????

??????????????????????????????????????????? referent ???????????????????????????????????????????????С????????????????????????????? —— ?????????????????????????е??????????棬????????????????????????????????? referent ??????????????????????????????????????????????????

???????????????????????????????Щ????ó???????????????????洢??????Щ?????????????? —— ???? SocketManager ??????????????????????????ó??????÷???WeakHashMap ??????? JDK 1.2 ??????У??????????????????????????á???????????? HashMap ?????????????????????????????????? Map ?????????????????WeakHashMap ??????????????????? Map ??????????????????????????????嵥 5 ?????? WeakHashMap ?? get() ?????????????????????????????????

?????嵥 5. WeakReference.get() ???????????


public class WeakHashMap implements Map {
    private static class Entry extends WeakReference
      implements Map.Entry {
        private V value;
        private final int hash;
        private Entry next;
        ...
    }
    public V get(Object key) {
        int hash = getHash(key);
        Entry e = getChain(hash);
        while (e != null) {
            K eKey= e.get();
            if (e.hash == hash && (key == eKey || key.equals(eKey)))
                return e.value;
            e = e.next;
        }
        return null;
    }