Java 26에서 가상 스레드와 JVM 성능 변화 읽기

Java 26의 가상 스레드, 패턴 매칭, G1 GC, Project Leyden과 양자 내성 암호화 변화를 실무 관점에서 정리한다.

2026-08-14 · 최초 발행 2026-04-20

2026년 3월 17일 릴리즈된 Java 26의 초점

Java 26은 2026년 3월 17일 공식 릴리즈됐다. 언어와 라이브러리, 런타임 성능, 보안에 걸친 개선을 담았으며, 중심에는 Project Loom 가상 스레드의 성숙화와 패턴 매칭 기능군의 완성이 있다.

6개월 주기 릴리즈 모델에서 Java 26은 대규모 전환보다는 기존 Preview 기능을 정리하고 런타임 품질을 높이는 데 집중한 릴리즈다. 동시성 도구, GC 성능, 현대적 네트워킹, 보안 강화가 주요 방향이며 약 20개 이상의 JEP를 포함한다. LTS 릴리즈는 아니고, 다음 LTS는 2027년 예정인 Java 29다.

가상 스레드가 바꾸는 동시성 운용 방식

Project Loom은 JVM이 관리하는 경량 스레드인 Virtual Thread를 도입한 OpenJDK 이니셔티브다. Java 21에서 정식 출범한 가상 스레드는 Java 26에서 운영 환경 수준의 완성도에 도달했다.

JVM 레이어OS 레이어YesNo애플리케이션 코드Virtual Thread (경량)I/O 대기?Carrier Thread에서 분리(unmount)Carrier Thread에서 실행(mount)다른 Virtual Thread 실행I/O 완료 재스케줄작업 완료OS Thread (소수)

소수의 OS 스레드 위에서 수백만 개의 가상 스레드를 운영할 수 있는 1:N 매핑이 핵심이다. I/O를 기다리는 가상 스레드는 Carrier Thread에서 자동으로 분리되고, 완료되면 다시 마운트된다. Thread.ofVirtual().start(...) 같은 API를 통해 기존 코드의 수정 범위를 작게 유지할 수 있다.

HTTP 서버에서는 요청마다 가상 스레드를 할당해 thread-per-request 모델을 다시 활용할 수 있다. 블로킹 JDBC 드라이버를 쓰는 데이터베이스 연결도 가상 스레드로 처리량을 대폭 높일 수 있으며, 마이크로서비스에서는 스레드 풀 튜닝 부담을 줄이고 코드 가독성을 높이는 방향으로 이어진다.

Java 26에서는 Structured Concurrency API가 더 이상 Preview가 아니며, Scoped Values도 최종 확정돼 ThreadLocal 대체를 완성했다. synchronized 블록 안에서 발생하는 핀닝(pinning) 문제도 추가로 해결해 가상 스레드 성능을 높였다.

switch와 레코드에 녹아든 패턴 매칭

Java 26에서 패턴 매칭 기능군은 최종 완성 단계에 진입했다.

기능 Java 버전 상태
instanceof 패턴 Java 16 정식
Switch 패턴 매칭 Java 21 정식
레코드 패턴 Java 21 정식
Primitive 타입 패턴 Java 23 Preview Java 26 정식
가드 패턴 (when 절) Java 21 정식

레코드 패턴을 쓰면 타입 검사와 값 분해를 switch 안에 함께 표현할 수 있다.

sealed interface Shape permits Circle, Rectangle {}
record Circle(double radius) implements Shape {}
record Rectangle(double w, double h) implements Shape {}

double area(Shape s) {
    return switch (s) {
        case Circle(var r)        -> Math.PI * r * r;
        case Rectangle(var w, var h) -> w * h;
    };
}

컴파일 타임 전수 검사(exhaustiveness check)는 런타임 오류를 막는 데 기여한다. instanceof와 캐스팅이 이어지는 패턴을 줄여 코드도 간결해진다. Primitive 패턴은 case int i when i > 0처럼 기본형 조건 패턴을 공식화한다.

GC와 시작 성능에서의 변화

G1 GC는 내부 병렬 처리에서 락 경합을 최소화해 스레드 간 동기화를 줄인다. 마이크로서비스와 고부하 서버에서는 GC 일시정지(pause) 시간을 단축하는 방향이며, ZGC와 Shenandoah도 저지연 GC 옵션으로서 안정성과 성능이 추가 개선됐다.

Project Leyden은 Java 애플리케이션의 시작 시간 단축을 목표로 하는 OpenJDK 이니셔티브다.

번째 실행AOT 프로파일 수집캐시 생성 (pre-init 객체)이후 실행: 캐시 로드시작 시간 50-70% 단축서버리스·컨테이너 환경 최적화

자주 사용하는 클래스와 객체를 사전 초기화 캐시에 저장하고, AOT 컴파일을 강화하는 접근이다. GraalVM Native Image와는 상호보완적인 관계에 있으며, 쿠버네티스 환경에서 Cold Start 문제를 대폭 완화하는 데 초점을 둔다.

암호화와 역직렬화의 보안 강화

ML-KEM(CRYSTALS-Kyber) 알고리즘 표준화는 Post-Quantum Cryptography 기반의 양자 내성 암호화를 강화한다. TLS 1.3에는 더 엄격한 기본 암호화 스위트가 적용되며, JCA/JCE도 최신 NIST PQC 표준에 맞춰 암호화 알고리즘을 갱신한다.

역직렬화 영역에서는 필터링 기본값을 강화해 RCE 취약점 벡터를 줄인다.

LTS 전환을 기준으로 잡는 마이그레이션

2024-01-012025-01-012026-01-012027-01-012028-01-012029-01-012030-01-01Java 21 LTS Java 22 Java 23 Java 24 Java 25 LTS Java 26 Java 27 Java 28 Java 29 LTS LTS비LTSJava LTS 릴리즈 타임라인

Java 17 LTS를 사용 중인 기업이라면 Java 21 LTS 업그레이드를 우선순위로 둘 수 있다. 이후 Spring Boot 3.x와 Java 21 이상 환경에서 Virtual Thread 활성화를 검토하고, 레거시 라이브러리의 JPMS 호환성을 사전에 확인해야 한다.

시작 성능이 중요한 서비스는 GraalVM Native Image도 검토 대상이다. 기존 instanceof 체인은 switch 패턴으로 점진적으로 교체할 수 있다. Java 26의 변화는 현대적 동시성, 표현력 있는 언어 문법, 클라우드 네이티브 성능이라는 JVM 생태계의 세 축을 더 밀어 올린다.

Sources

Java 26가상 스레드Project LoomJVM 성능패턴 매칭