2017-09-21 7 views
0

저는 YourKit 프로파일 러를 사용했으며이 해시 테이블과 뮤텍스가 196KB까지 유지되는 이유를 분석하려고합니다. The 이미지가 첨부되어 있습니다. 예, 약 2000 개의 개체에 196KB의 데이터가 있으므로이 문제가 발생합니다. 이것은 잠재적 인 문제입니다. 이것은 스레드 안전 env입니다. 따라서 해시 테이블이 다른 것 대신 사용됩니다.해시 테이블에 보유 된 크기 및 뮤텍스

+0

왜이 요소를 가져 오는 요소가 더 깊어 보이지 않는가? – egorlitvinenko

+0

@egorlitvinenko 뮤텍스 내에는 완전한 해시 테이블이 차지하는 공간의 약 80 %에 해당하는 테이블이 있습니다. ConcurrentHashMap 또는 다른 데이터 구조로 유지되는 크기가 줄어들면 어떻게됩니까? – bhavs

+0

또한 언급 된 크기는 137입니다. 단 15 개의 요소가 해시 테이블에 존재하는 이유는 무엇입니까? – bhavs

답변

0

ConcurrentHashMap 또는 다른 데이터 구조로 유지되는 크기가 줄어들면 어떻게됩니까?

용량을 줄이는 가장 좋은 방법은 명시 적으로 초기 용량을 설정하는 것입니다 (이것은 생성자의 매개 변수입니다).

일반적으로 ConcurrentHashMap을 사용하는 것이 더 좋습니다. 왜냐하면 제거 된 기술과 더 뛰어난 Hashtable을 사용하기 때문입니다.

뮤텍스는이 경우 귀하의 Hashtable 인스턴스입니다. 그래서 하나의 객체를 두 번 보았 기 때문에이 점령 된 크기를 볼 수 있습니다.

해시 가능 (다른 많은 해시 맵 등)에는 동적 크기가 있습니다. Hashtable.size - 요소의 수인 Hashtable.count와 달리 예약 된 내부 해시 테이블의 실제 크기입니다.

더 큰 크기의 파트가 차지하는 유일한 장소는 Hashtable 자체이므로 Hashtable.table 내부로 이동하면 볼 수 있습니다.