Java 26 출시! AOT 캐싱, HTTP/3 지원, G1 GC 개선으로 성능 UP!
Java 26은 AOT(Ahead-of-Time) 객체 캐싱을 통해 애플리케이션 시작 시간을 단축하고, ZGC 등 모든 GC에서 호환성을 제공함.
HTTP/3 지원을 통해 HTTP Client API의 성능을 향상시키고, 최신 웹 표준을 지원함.
G1 GC의 동기화 오버헤드 감소를 통해 처리량을 개선하고, 전반적인 성능을 향상시킴.
Lazy Constants API 개선 및 final 필드 변경에 대한 경고 도입을 통해 코드의 안정성을 높임.
AOT(Ahead-of-Time) 객체 캐싱(Object Caching) 기술의 발전
Java 26에서는 AOT(Ahead-of-Time) 캐싱 기술이 발전하여, ZGC를 포함한 모든 GC에서 호환성을 제공한다. AOT 캐싱(AOT Caching)은 애플리케이션 시작 시간을 최대 41%까지 단축시키는 효과를 보이며, 특히 대규모 애플리케이션에서 유용하다. 이전에는 G1, Serial GC, Parallel GC에서만 지원되었지만, 이제는 스트림 가능한(Streamable) 캐시 형식을 통해 ZGC에서도 사용할 수 있게 되었다.
HTTP/3 지원 및 HTTP Client API 개선
Java 26은 HTTP/3 프로토콜을 공식적으로 지원하여, HTTP Client API의 성능을 향상시킨다. HTTP/3(QUIC)는 빠른 핸드셰이크(Handshake)와 Head-of-Line Blocking 문제를 해결하여, 네트워크 환경이 좋지 않은 경우에도 성능을 개선한다. 하지만, HTTP/3는 아직 널리 사용되지 않으므로, 개발자는 HTTP/3를 명시적으로 활성화해야 한다. ofFileChannel 메서드를 통해 대용량 파일 업로드도 지원한다.
G1 GC의 동기화 오버헤드 감소
Java 26에서는 G1 GC의 성능을 개선하기 위해, 두 번째 Card Table을 도입하여 동기화 오버헤드를 줄였다. 이로 인해 애플리케이션 스레드와 GC 스레드 간의 동기화가 감소하여, 처리량이 5~15% 향상된다. G1 GC(Garbage Collector)는 기본적으로 사용되며, 별도의 코드 변경 없이 업그레이드만으로 성능 향상을 경험할 수 있다. 메모리 오버헤드는 0.2%로 미미하다.
Lazy Constants API 개선 및 final 필드 변경에 대한 경고
Java 26에서는 Lazy Constants API가 개선되어, 사용 편의성이 향상되었다. Lazy Constants는 불변 데이터를 지연 초기화하여, 런타임 성능을 최적화한다. 또한, final 필드 변경에 대한 경고를 도입하여, 개발자가 Reflection을 통한 final 필드 변경 시 잠재적인 문제를 인지하도록 돕는다. 향후 릴리스에서는 예외가 발생하도록 변경될 예정이다.