2012-05-22 5 views
0

이 키가 오래되어서 버릴 준비가되었는지 어떻게 알 수 있습니까? 왜 문자열 리터럴? 예를 들어 자바 : weakhashmap이 키가 '쓸모없는'것인지 아닌지를 어떻게 결정합니까?

,
private static WeakHashMap<<? extends Object>, String> m = 
          new WeakHashMap<<? extends Object>, String>(); 

    public static void A(){ 

     Point p = new Point(); 
     m.put(p, "a"); 

    } 

그것은 'P'키 A() 반환 즉시 사라질 것이라는 점을 의미합니까?

답변

5

WeakHashMap 그 결정을 내리지 않습니다. 오히려 일반적인 Java 가비지 콜렉션 프로세스는 참조되지 않은 키를 삭제합니다. p 키는 Java 가비지 수집이 트리거되는 즉시 사라집니다.

무엇을 WeakHashMap은 약한 참조를 사용하여 키를 참조하기 때문에 가비지 수집기는 WeakHashMap의 참조를 메모리에서 키 객체를 "보유"하는 것으로 계산하지 않습니다.

+0

의미가 있지만 ... 왜 문자 리터럴/ – peter

+0

문자열 리터럴과 관련이 있습니까? –

+0

은 string key = new string ("something") 대신 string key = "something"을 사용하는 것과 같습니다. – peter