[개발 일기] 2025.05.19 - ConcurrentHashMap이 HashMap보다 빠른 이유

2025. 5. 19. 13:04·개발 일기

💡 개요

 

클린코드 책의 동시성 파트에서 ConcurrentHashMap이 HashMap보다 빠르다고 나와있다.

 

 

어..? 왜..?

 

 

 

🛠️ ConcurrentHashMap

 

[개발 일기] 2025.04.26 - Collections.synchronizedXXX() vs Concurrent Collections

 

 

ConcurrentHashMap과 HashMap의 차이점은 위 글에서 확인할 수 있다.

 

 

간략하게 차이점을 정리하면 동기화 지원 여부의 차이이다.

 

 

ConcurrentHashMap은 동기화를 지원하기 때문에 멀티스레드 환경에서도 안전하게 동작한다.

 

 

하지만 내부에서 동기화 작업을 수행한다면 당연히 동기화 작업을 수행하지 않는 HashMap보다 느려야 하는 게 정상 아닌가??

 

 

일단 ConcurrentHashMap의 동기화 원리에 대해 설명해보면, Java 8 이후부터는 Bucket 단위로 Lock을 거는 방식으로 사용된다.

 

 

이는 전체 맵을 하나의 락으로 관리하는 것이 아닌, 부분적으로 나누어 락을 걸 수 있도록 설계된 것이다.

 

 

🔓 부분 락의 이점

  • 동시에 여러 스레드가 서로 다른 영역에 접근 가능
  • 병렬 처리의 효율이 높아짐
  • 예를 들어, 스레드 A는 키 1에 접근하고, 스레드 B는 키 1000에 접근하는 경우 두 작업이 서로 간섭 없이 병렬로 실행될 수 있음

 

부분 락의 개념에 대해 간략하게는 알고 있었다.

 

 

이러한 점을 ChatGPT에게 물어보니까, HashMap이 더 빠를 수도, 더 느릴 수도 있다고 한다.

 

 

그 이유는 다음과 같다.

 

ConcurrentHashMap은 동기화를 적용했음에도, 세밀한 락 분할과 최적화된 알고리즘 덕분에 멀티스레드 환경에서 HashMap보다 더 빠를 수 있다.

 

 

하.. 약간 아리까리하다. (ChatGPT를 맹신하면 안되니까..!)

 

 

대부분의 애플리케이션이 멀티스레드를 사용하니까 뭐 HashMap보다 빠를 수 있을 듯 하다..

 

 

아마 ConcurrentHashMap가 더 빠르다는 내용이 나온 파트가 동시성과 관련된 부분이라서 멀티스레드 환경을 고려하여 설명한 내용인 것 같다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.05.21 - 점진적인 개선 (Feat : 클린코드)  (0) 2025.05.21
[개발 일기] 2025.05.20 - XSS  (0) 2025.05.20
[개발 일기] 2025.05.18 - Spring Flux을 많이 사용하지 않는 이유?  (0) 2025.05.18
[개발 일기] 2025.05.17 - 비동기와 멀티스레딩?  (1) 2025.05.17
[개발 일기] 2025.05.16 - PSA (Portable Service Abstraction)  (0) 2025.05.16
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.05.21 - 점진적인 개선 (Feat : 클린코드)
  • [개발 일기] 2025.05.20 - XSS
  • [개발 일기] 2025.05.18 - Spring Flux을 많이 사용하지 않는 이유?
  • [개발 일기] 2025.05.17 - 비동기와 멀티스레딩?
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.05.19 - ConcurrentHashMap이 HashMap보다 빠른 이유
상단으로

티스토리툴바