-
Java 25 Performance ImprovementJava/Java25 2025. 12. 21. 11:18
출처 : https://www.youtube.com/watch?v=223_7r0H6OE
JDK 21 -> JDK 25 upgrade 시
Latency 10% 향상
Throughtput 5% 향상
Critical JOPS: 시스템의 지연 시간(Latency)을 나타내는 수치
Max JOPS: 시스템의 전체적인 처리량(Throughput)을 나타내는 수치
SPECjbb(Standard Performance Evaluation Corporation Java Business Benchmark)는 자바 비즈니스 로직 성능을 평가하기 위한 도구
SPECjbb2015 : 2015년에 성능 평가도구가 개발되었음
아래 그림에서 보듯이 JDK 17 -> 21 때는 성능 개선이 미미 했으나,
JDK 21 -> 25 는 괄목한 성과가 있었음

성능 개선 이유
01. 컴팩트 객체 헤더 (Compact Object Headers): 자바 객체가 차지하는 메모리 공간을 줄여 CPU 캐시 효율을 높이고 가비지 컬렉션(GC) 부담을 줄였습니다.
02. 가상 스레드 및 스케줄러 개선: JDK 21에서 정식 도입된 가상 스레드의 관리 효율이 JDK 25에서 더욱 정교해졌습니다.
03. Stable Values 도입: 변하지 않는 값을 더 빠르게 읽을 수 있도록 하는 내부 최적화가 적용되어 전체적인 실행 속도가 빨라졌습니다.성능 항상 JEP lists
HotSpot JVM
JFR Java Flight Recorder
518: JFR Cooperative Sampling (25)
- JFR 스택 추적 샘플링 방식은 스레드에 신호를 보내 강제로 멈추게 하는 방식(Signal-Base)였으나 이를 Cooperative 방식으로 전환
- 신호 overhead 감소
509: JFR CPU-Time Profiling (Experimental) (25)
- JFR profiling 은 실제 경과 시간(Wall-clock time) 기준이였으나, 실제 CPU 를 점유한 순수 CPU 사용 시간 추가
- 병목 지점 파악에 유리
520: JFR Method Timing & Tracing (25)
- 얼마나 자주 실행되고, 각 실행에 얼마나 시간이 걸리는지 매우 낮은 비용으로 추적할 수 있음
Garbage Collectors
521: Generational Shenandoah (25)
- 기존 단일 세대(Non-generational) 로 운영되던 Shenedoah GC 에 세대별 수집(Generation)모드 추가
- Old 보다 Young Generation 이 생성과 소멸이 많으므로 이를 나누어 수집하여, 메모리 사용과 처리량을 높임
475: Late Barrier Expansion for G1 (24)
- G1 GC 의 Barrier code 생성 시점을 C2 JIT 마지막 단계로 지연 -> GC 구현이 단순해지고, 유지보수 개선 효과
423: Region Pinning for G1 (22)
- G1 GC 에서 메모리 영역을 고정(Pinning)할 수 있는 기능
- GC 대기 시간 지연을 획기적으로 줄이고, OOM 오류를 방지
474: ZGC: Generational Mode by Default (23)
- ZGC default 실행 모드를 Generational 로 변경, 비세대 모드는 중단(deprecated)
- 개발팀이 세대별 모드에만 집중
490: ZGC: Remove the Non-Generational Mode (24)
- 위의 비세대 모드(Non-generational) ZGC 코드 제거
JIT Compilers
515: Ahead-of-Time Method Profiling (25)
- Project Leyden 용
- JIT compiler 는 code 가 얼마나 자주 실행되는지 profiling 한 뒤 최적하 합니다.
- 이 JEP 는 이전 실행에서 얻는 profiling 정보를 저장했다가 다음 실행에 즉시 사용하여, warm-up 시간을 획기적으로 단축
Run-Time System
483: Ahead-of-Time Class Loading & Linking (24)
- Project Leyden 용
- 기존 Java 는 클래스를 실행 시점(필요할 대) 읽어오고 연결함
- 이 JEP 는 App 실행 전 (CDS Archive생성단계)에 미리 처리함
514: Ahead-of-Time Command-Line Ergonomics (25)
- Project Leyden 용
- JVM 은 실행될 때마다 현재 메모리 상황에 맞춰 힙 크기등을 계산합니다.
- 이JEP는 계산 결과까지 미리 Archive 에 저장합니다. 시작 시 발생하는 미세한 지연 시간까지 최소화 합니다
519: Compact Object Headers (25)
- Project Lilliput (걸리버 여행기에 나오는 난쟁이 나라)
- Java Object 의 Header 에 Meta data 를 128 bit -> 64 bit 로 압축
- 전체 Heap Memory 사용량이 10~20% 감소,
- Java Object 크기가 줄어들어 실행 속도도 개선됨
주의 : preview feature
491: Synchronize Virtual Threads without Pinning (24)
- Project Loom 용
- Virtual Thread 는 synchronized block 안에서 I/O 작업을 만다면 실제 운영체제 스레드(Carrier Thread)에 고정되어 버리는 Pinning 문제가 있었습니다
- 이 JEP 는 synchronized 안에서도 가상 스레드가 자유롭게 Unmount/Yield 할 수 있게 합니다
- synchronized 를 사용하는 JDBC등의 라이브러리에서 수정 없이 Virtual Thred 를 고성능으로 사용할 수 있습니다.
Helidon SE
Oracle 의 프레임워크인 Helidon SE 을 사용하면 1.7 배(73%)의 성능 개선이 있다Helidon SE는 오라클(Oracle)에서 개발한 마이크로서비스용 오픈소스 경량형 자바 프레임워크 ( cf, spring boot )
- Netty 기반의 비동기 I/O 사용

ETC
The Circle of Life for Java Code
Java 의 특징 Tiered Compilation : Interpreter -> C1 -> C2 로 처음엔 빨리 실행하고(C1), 나중에 최적하 하여 아주 빠르게 실행(C2) 하는 전략을 취한다
C1 : 자주 쓰이는 코드를 대상으로 하는 최적화 단계(빠른 컴파일 속도와 적절한 성능 향상 사이의 균형)
C2 : 프로그램 실행 패턴을 붆석하여 공격적인 최적화 수행, cpu/memory 를 많이 소모하지만, 결과물인 기계어의 실행 속도는 가장 빠름
C2 최적화를 위한 Trick 을 위하여 아래 전략을 택할 수 있는데, 일반적이지 않고, 특화된 영역이므로 생략한다
inlining
Loop unrolling
Hoisting
Dead Code Elimination
AutoVectorization - SuperWorldReference
From JDK 21 to JDK 25 - Java Performance Update 2025
Per-Ake Minborg on October 18, 2025https://inside.java/2025/10/18/devoxxbelgium-java-performance-update/
From JDK 21 to JDK 25 - Java Performance Update 2025 – Inside.java
JDK 25 has just been released and is packed with performance improvements compared to JDK 21, allowing your unchanged application code to run even faster.In this talk, we will take a closer look at 13 concrete performance improvements made between J…
inside.java
'Java > Java25' 카테고리의 다른 글
JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism (1) 2025.12.28 JEP 511: Module Import Declarations (0) 2025.12.27 JEP 513 Flexible Constructor Bodies (0) 2025.12.20 JEP 512 Compact Source File & Instance Main Method (0) 2025.12.20 JEP 506 Scoped Values (0) 2025.12.16