자바(Java) JVM, 객체 헤더 압축으로 성능 향상!
JEP 534를 통해 자바(Java) HotSpot JVM에서 압축 객체 헤더(Compact Object Headers)를 기본으로 사용하도록 변경
압축 객체 헤더는 64비트 아키텍처에서 객체 헤더 크기를 96~128비트에서 64비트로 축소하여 힙(Heap) 사용량 감소 및 데이터 지역성(Data Locality) 향상
JDK 24부터 안정성이 검증되었으며, Amazon, SAP 등에서 이미 프로덕션 환경에 적용하여 성능 개선 효과 확인
향후 릴리스에서 기존 객체 헤더 레이아웃은 더 이상 사용되지 않도록(Deprecated) 할 예정
압축 객체 헤더(Compact Object Headers)의 기술적 배경
JEP 534는 자바(Java) HotSpot JVM에서 압축 객체 헤더(Compact Object Headers)를 기본 설정으로 변경하는 것을 목표로 한다. 이는 JEP 450(JDK 24) 및 JEP 519(JDK 25)를 통해 도입된 기능으로, 64비트 아키텍처에서 객체 헤더 크기를 줄여 힙(Heap) 메모리 사용량 감소를 유도한다. 특히, 데이터 지역성(Data Locality) 향상을 통해 캐시 미스(Cache Miss)를 줄여 성능을 개선하는 효과를 기대할 수 있다.
성능 향상 및 실제 사례
압축 객체 헤더는 다양한 벤치마크에서 성능 향상을 입증했다. 예를 들어, SPECjbb2015 벤치마크에서 힙 공간 22% 감소 및 CPU 사용 시간 8% 감소 효과를 보였다. 또한, 가비지 컬렉션(Garbage Collection) 횟수를 최대 15% 줄이는 효과도 확인되었다. Amazon은 이미 여러 서비스에 적용하여 성능 개선을 경험했으며, SAP는 자사 OpenJDK 포크인 SapMachine에서 기본 설정으로 사용하고 있다.
향후 계획 및 고려 사항
향후 릴리스에서는 기존 객체 헤더 레이아웃이 더 이상 사용되지 않도록(Deprecated) 할 예정이다. 이는 개발자들이 압축 객체 헤더를 적극적으로 사용하도록 유도하기 위한 조치이다. 하지만, Project Valhalla와 같은 미래 기능을 위해 추가적인 객체 헤더 비트가 필요할 수 있다는 점을 고려해야 한다. 만약 더 많은 비트가 필요하다면, 압축된 클래스 포인터(Compressed Class Pointers) 및 ID 해시 코드(Identity Hash Codes)를 추가적으로 축소하는 방안을 고려할 수 있다.