Project Valhalla, JDK 28 통합 10년 여정 설명

원제: Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28

왜 중요한가

Java의 메모리 효율성과 성능 향상을 가져올 수 있는 기본적인 변화로, 데이터 집약적 애플리케이션과 클라우드 컴퓨팅 환경에서의 Java 경쟁력 강화에 기여할 수 있다.

오라클 엔지니어가 6월 15일 JEP 401(값 클래스 및 객체)이 JDK 28에 통합될 것을 확인했다. 197,000줄 이상의 코드가 1,816개 파일에 추가되는 대규모 변경이며, 프리뷰 상태로 기본 비활성화되어 있다. 이는 2014년부터 시작된 프로젝트의 첫 번째 단계다.

Project Valhalla의 핵심 목표는 '클래스처럼 작성하되, 정수처럼 동작'하는 것이다. Java의 근본 문제는 8개 기본형을 제외한 모든 것이 참조 타입이라는 점이다. Point p = new Point(1, 2)를 작성할 때, 변수 p는 점이 아니라 힙 메모리의 주소를 가리키는 포인터다. 단일 객체는 문제가 아니지만, 규모가 커지면 메모리 효율성이 크게 떨어진다.

각 객체는 헤더(메타데이터 약 12바이트)를 가지며, 개별 할당 및 가비지 컬렉션이 필요하다. 백만 개의 Point 배열은 실제로 힙 전체에 흩어진 백만 개의 상자를 가리키는 백만 개의 슬립이 된다. Brian Goetz는 이를 '퍼프 업된' 메모리 레이아웃으로 표현한다. 메모리 밀도가 중요한 이유는 하드웨어 발전 때문이다. 1995년에는 메모리 접근과 CPU 연산 비용이 비슷했지만, 오늘날 CPU는 메인 메모리보다 2배 빠르며, 캐시가 그 격차를 메운다. 프로세서는 64바이트 단위(캐시 라인)로 메모리를 읽으므로, 데이터가 밀집되고 순차적으로 배치되면 캐시 효율성이 크게 향상된다.

JDK 28 통합은 프리뷰 상태이며 기본으로 비활성화되어 있다. Brian Goetz는 이것이 Valhalla의 '첫 번째 부분일 뿐'이라고 강조했으며, 커뮤니티 내에서는 오래전부터 '실제 중요한 부분은 배포되지 않을 것'이라는 농담이 돌아다니고 있다. 이 변경은 매우 크기 때문에 나머지 커미터들에게 대규모 커밋을 보류할 것을 요청했다.

출처

jvm-weekly.com — 원문 읽기 →