Java의 컴팩트 객체 헤더, 제품 기능으로 승격

2025-05-22

JEP 519를 통해 실험적인 기능이었던 "컴팩트 객체 헤더"가 Java의 정식 제품 기능으로 승격되었습니다. 객체 헤더 레이아웃 최적화 및 성능 향상을 목적으로 JDK 24에서 도입되었으며, Oracle과 Amazon에서 광범위한 테스트를 거쳐 안정성과 성능 향상이 입증되었습니다. 활성화를 위한 `-XX:+UnlockExperimentalVMOptions` 옵션은 더 이상 필요하지 않습니다. 향후 더 많은 객체 헤더 비트가 필요한 경우 Project Valhalla와 Lilliput이 솔루션을 제공할 것입니다.

더 보기
개발

AOT 캐시 프로파일 개선을 통한 Java 빠른 시작

2025-05-11

이 개선 사항은 애플리케이션의 트레이닝 실행 중에 메서드 실행 프로파일을 수집하여 AOT 캐시에 저장함으로써 Java 애플리케이션의 웜업 시간을 크게 단축합니다. 프로덕션 환경에서 시작할 때 JIT 컴파일러는 이러한 프로파일을 사용하여 네이티브 코드를 즉시 생성할 수 있으므로 프로파일 수집을 기다릴 필요가 없어지고 시작 및 최고 성능이 빨라집니다. 이 기법은 코드 변경이 필요 없으며 기존 AOT 캐시 생성 명령과 호환됩니다. 실험 결과 간단한 예제 프로그램의 웜업 시간이 19% 단축되었습니다.

더 보기
개발 AOT 캐시

Java, final 필드의 불변성 강화

2025-03-31

Java 프로그램의 안전성과 성능을 향상시키기 위해 JDK는 final 필드의 불변성을 강화할 계획입니다. 현재 깊은 반사(deep reflection)를 통해 final 필드를 변경할 수 있지만, 이는 final 키워드의 본래 의도에 위배되며 JVM 최적화를 제한합니다. 향후 릴리스에서는 기본적으로 깊은 반사를 통한 final 필드 변경을 금지하고 경고를 표시합니다. 개발자는 `--enable-final-field-mutation` 옵션을 사용하여 final 필드 변경을 선택적으로 활성화할 수 있지만, 가능한 한 피하는 것이 좋습니다. 이러한 변경은 Java의 "기본 안전" 기능을 개선하고 레코드 클래스 설계와 일관성을 유지하기 위한 것입니다.

더 보기

Java JEP 483: 사전 클래스 로딩 및 링크를 통한 시작 시간 단축

2024-12-22

JEP 483은 HotSpot JVM 시작 시 애플리케이션 클래스를 미리 로딩 및 링크하여 Java 애플리케이션의 시작 시간을 크게 줄입니다. 애플리케이션의 단일 실행을 모니터링하고 모든 클래스의 로드 및 링크된 형태를 캐시에 저장하여 후속 실행에서 재사용함으로써 이를 달성합니다. 이 기능은 코드 변경이 필요 없으며 Spring PetClinic과 같은 대규모 서버 애플리케이션에서 상당한 속도 향상을 제공합니다(시작 시간 42% 단축). 현재는 2단계 프로세스이지만 향후 버전에서는 캐시 생성이 1단계로 간소화되고 더 유연한 교육 실행 구성이 가능해집니다.

더 보기
개발