source

Map.clear() vs new Map : 어떤 것이 더 좋을까요?

gigabyte 2022. 12. 8. 21:22
반응형

Map.clear() vs new Map : 어떤 것이 더 좋을까요?

있습니다.Map<String, String> testMap = new HashMap<String, String>();이 지도에는 1000개의 데이터가 있을 수 있습니다.

내 응용 프로그램에서 새로운 데이터 목록이 필요할 때, 나는 지도를 지워야 한다.하지만 Map.clear()의 코드를 봤을 때

/**
     * Removes all of the mappings from this map.
     * The map will be empty after this call returns.
     */
    public void clear() {
        modCount++;
        Entry[] tab = table;
        for (int i = 0; i < tab.length; i++)
            tab[i] = null;
        size = 0;
    }

클리어 메서드는 n회 반복된다는 것을 깨달았습니다(여기서 n은 Map의 데이터 수입니다). 그 을 다시 할 수 있는 을 했습니다.testMap = new HashMap<String, String>();이전에 사용한 맵은 가비지가 수집됩니다.

하지만 이것이 좋은 방법이 될지는 잘 모르겠습니다.저는 모바일 어플리케이션 작업을 하고 있습니다.

안내 좀 해주시겠어요?

복잡한 질문입니다.어떻게 되나 보자.

새 어레이로 백업되는 새 인스턴스를 인스턴스화합니다.따라서 가비지 콜렉터는 이전 맵에서 모든 키와 값을 클리어하고 자신에 대한 참조를 클리어해야 합니다.따라서 O(n) 알고리즘은 가비지 컬렉터 스레드에서 실행됩니다.1000개의 레코드의 경우 차이가 없습니다.하지만 성능 가이드에 따르면 가능하면 개체를 만들지 않는 것이 항상 좋습니다.그래서 저는 그냥clear()★★★★★★ 。

어쨌든 두 가지 변형을 모두 시험해 보고 측정해 보세요.항상 재세요!

라고 말할 때Map.clear() 지도에서n...GC를 사용합니다.2*n라고 말할 때null맵에 GC에 .2*n+1(일부러 1).그런 다음 새로운 Map 인스턴스를 생성해야 합니다.또 다른 오버헤드가 발생합니다. for so so so so so soMap.clear()지도의 크기를 미리 설정하고 인스턴스화하는 것이 좋습니다.

것은 메모리 에서 더 생각했기 에 java로 것이 ..clear() 오브젝트를

clear() 메서드를 사용하는 것은 맵에서 다른 오브젝트에 대한 참조를 삭제하여 "맵이 다른 곳에서 참조되었을 때 키/값이 지연되지 않도록 하는 것입니다.

그러나 맵이 특정 코드에 의해서만 사용되는 로컬 맵인 경우(즉, "map is not referenced")는 새로운 맵을 사용합니다.그러나 1000개의 참조를 null로 설정하면 퍼포먼스가 크게 저하됩니다.

지도의 인구 재확보를 잊지 마라

새 맵에 용량을 지정하지 않으면 새로 생성된 맵에서 상당한 오버헤드가 발생합니다.그것은 각각 O(n)회이며 O(log(n)회 발생하지만 O(n)회 발생하지만 O(n)회 발생은 O(n)합계에 상각될 수 있지만 처음부터 발생하지 않으면 여전히 더 좋습니다.

용량이 변경되지 않기 때문에 클리어된 맵에서는 이 문제가 발생하지 않습니다.

새로운 HashMap()을 호출하는 것이 해시맵을 클리어하는 것만큼 많은 처리를 할 필요가 없기 때문에 더 좋은 아이디어라고 생각합니다.또한 새로운 해시맵을 작성함으로써 해시맵이 데이터를 사용하는 컨트롤에 바인드되어 해시맵이 클리어될 때 문제가 발생할 가능성을 배제할 수 있습니다.

모든 데이터를 삭제하는 map.clear().이렇게 하면 모든 엔트리가 폐기될 뿐이지만 초기 용량으로 축소되지 않고 엔트리를 저장하기 위해 사용되는 내부 어레이는 동일한 크기로 유지됩니다.그것도 삭제해야 하는 경우 해시맵 전체를 폐기하고 새 인스턴스로 교체하는 것이 가장 쉬운 방법입니다.물론 지도에 대한 포인터를 가지고 있는 사람을 제어할 때만 효과가 있습니다.

메모리 회수에 대해서는, 가비지 콜렉터에 맡길 필요가 있습니다.

가치관도 긴가요?이 경우 GNU Trove 라이브러리에 있는 TLongLongHashMap 등 일반적인 해시맵보다 (메모리 효율이) 높은 실장을 검토할 수 있습니다.그러면 메모리가 많이 절약될 거예요.

언급URL : https://stackoverflow.com/questions/6757868/map-clear-vs-new-map-which-one-will-be-better

반응형