자바 개발자들에게 희소식이 있습니다. 10년 이상 진행된 '발할라 프로젝트(Project Valhalla)'의 핵심 기능인 JEP 401(Value Classes and Objects)이 마침내 JDK 28에 프리뷰(preview) 기능으로 통합됩니다. 이 프로젝트의 목표는 자바 객체를 '클래스처럼 코딩하면서도 정수(int)처럼 효율적으로 동작'하게 만들어, 객체 헤더, 힙 할당, 가비지 컬렉션(GC), 포인터 간접 참조 등 기존 객체 모델의 고질적인 성능 비용을 줄이는 것입니다.
현재 자바는 8가지 기본형(primitive type)을 제외한 거의 모든 것이 참조 타입(reference type)입니다. 예를 들어, `Point p = new Point(1, 2)`에서 `p`는 실제 `Point` 객체가 아니라 힙(heap)에 있는 객체를 가리키는 포인터입니다. 이로 인해 객체 수가 많아지면 메모리 접근 비용이 급격히 증가하며, CPU 캐시(cache) 효율성도 떨어지는 문제가 있었습니다. JEP 401은 이러한 문제를 해결하기 위해 '값 클래스(value class)'를 도입합니다. 값 클래스로 선언된 객체는 고유한 식별자(identity)를 가지지 않으며, JVM은 이들을 스칼라화(scalarization)하거나 힙 평탄화(heap flattening)하여 메모리에 조밀하게 배치할 수 있습니다. 이는 마치 기본형처럼 데이터가 메모리에 나란히 놓이게 하여, CPU 캐시 활용도를 높이고 성능을 크게 향상시킬 수 있습니다. 다만, JDK 28의 값 클래스는 아직 널(null)을 허용하는 참조 타입이며, `--enable-preview` 옵션을 통해 사용할 수 있습니다.
이번 발할라 프로젝트의 통합은 자바 성능 최적화에 있어 중요한 전환점이 될 것입니다. 개발자들은 이제 데이터의 '식별성(identity)'과 '값(value)'의 차이를 명확히 이해하고 코드 설계에 반영해야 합니다. 특히, `==` 연산자의 동작 방식, 동기화(synchronized) 제약, 배열 성능, 그리고 향후 제네릭(generic) 전문화에 이르기까지 광범위한 영향을 미 미칠 것으로 예상됩니다. 이는 자바가 현대 하드웨어의 특성을 더 잘 활용하고, 고성능 컴퓨팅 환경에서 더욱 강력한 언어로 자리매김하는 데 기여할 것입니다. 장기적으로는 자바 애플리케이션의 전반적인 반응성과 처리량을 개선하여, 클라우드, 빅데이터, AI 등 다양한 분야에서 자바의 경쟁력을 한층 더 높일 것으로 기대됩니다.