Java -- WeakHashMap

5953 단어 WeakHashMap
머리말
자바 의 인용 유형 은 네 가지 상황 으로 강 인용,소프트 인용,약 인용,허 인용 이다.이런 것들 에 관 한 소 개 는 소인 의 또 다른 박문 을 참고 할 수 있 습 니 다.                                                                                                                                               http://www.cnblogs.com/plxx/p/4217178.html  
개술
Weak Hash Map,가족 과 Hash Map 은 동년배 입 니 다.
public class WeakHashMap<K,V>  extends AbstractMap<K,V>  implements Map<K,V>


WeakHashMap---An entry in a WeakHashMap will automation be remove when its key is no longer in ordinary use.key 를 더 이상 사용 하지 않 을 때 자동 으로 삭 제 됩 니 다.더 이상 사용 하지 않 는 것 은 어떤 상태 입 니까??GC 루트 가 매 거 지지 않 을 때 는 GC(finalizable-->finalized-->reclaimed참고 하 다)에 의 해 이 럴 수 있다 고 생각 합 니 다.
HashMap 과 마찬가지 로 Weak HashMap 은를 모두 null 로 허용 합 니 다.초기 크기 는 16 이 고 load factor 는 0.75 이 며 스 레 드 가 안전 하지 않 습 니 다.
Once such a key is discarded it can never be recreated, so it is impossible to do a lookup of that key 
in a WeakHashMap at some later time and be surprised that its entry has been removed.

Key 가 삭제 되면 다시 만 들 수 없고,조회 하면 나중에 entry 가 삭 제 됩 니 다.
Each key object in a  WeakHashMap  is stored indirectly as the referent of a weak reference. 
value objects do not strongly refer to their own keys, either directly or indirectly,
since that will prevent the keys from being discarded

 그 중의 key 는 weak reference 를 저장 합 니 다.value 에 저 장 된 것 은 strong reference 입 니 다.value 는 직접적 이거 나 간접 적 으로 key 와 연결 되 지 않 으 면 key 의 제 거 를 막 을 수 있 습 니 다.
3.소스 코드 보기
 1  private void expungeStaleEntries() {

 2         for (Object x; (x = queue.poll()) != null; ) {

 3             synchronized (queue) { //         4                 @SuppressWarnings("unchecked")

 5                     Entry<K,V> e = (Entry<K,V>) x;

 6                 int i = indexFor(e.hash, table.length);

 7 

 8                 Entry<K,V> prev = table[i]; //           9                 Entry<K,V> p = prev;
            //
10 while (p != null) { 11 Entry<K,V> next = p.next; 12 if (p == e) { 13 if (prev == e) 14 table[i] = next; 15 else 16 prev.next = next; 17 // Must not null out e.next; 18 // stale entries may be in use by a HashIterator 19 e.value = null; // Help GC 20 size--; 21 break; 22 }
               // --
23 prev = p; 24 p = next; 25 } 26 } 27 } 28 }

  expunge - Stale -  Entries 오래된 실체 지우 기
resize(),size(),getTables()와 관련 된 작업 에서 이 방법 을 호출 합 니 다.사용 하지 않 는 대상 을 모두 지 웁 니 다.

좋은 웹페이지 즐겨찾기