2013-04-26 5 views
2
public class MyCache { 

    AbstractMap<String, AbstractMap<String, Element>> cache = new TreeMap<String, AbstractMap<String, 
      Element>>(); 

    public Boolean putElement(String targetNamespace, Element element) { 
     ... 
    } 

    public void clear() { 
     cache.clear(); 
    } 

    // is it better this way? 

    public void deepClear() { 
     for(AbstractMap<String, Element> innerMap : cache.values()) { 
      innerMap.clear(); 
     } 
     cache.clear(); 
    } 
} 

루트 맵의 값을 반복하고 루트에 중첩 된 모든 맵을 먼저 지우거나 가장 바깥 쪽 맵을 지우려면 충분합니까? 두 가지 방법 사이에 JVM의 메모리 소비에 차이가 있다면 내 주요 질문은 무엇입니까?Java에서 중첩 된 맵을 지우는 좋은 방법

+2

'AbstractMap'을 사용하는 특별한 이유가 있다면,'Map'' 인터페이스를 직접 사용하지 않을까요? – harsh

+0

아니요, "AbstractMap"대신 "Map"을 사용하면 내 IDE가 항상 java.util 이외의 패키지에서 Map 구현을 제안하기 때문입니다. –

답변

3

두 가지 접근 방식은 동일합니다. 첫 번째 맵이 지워지면 중첩 된 맵에 대한 참조를 보유하는 객체가 없다고 가정 할 때 포함 된 모든 맵은 가비지 수집 될 수 있으므로 해당 맵이 참조하는 모든 객체도 참조 할 수 있습니다.

+0

좋아, 나는 C/C++ 프로그래머로서 내 시간 때문에 나는 메모리 문제로 약간의 장애가 있다고 생각한다 :) –

관련 문제