- Oracle이 자바 24 (JDK 24) 출시를 공식 발표
- JDK 24는 JCP의 JSR 399에서 지정한 Java SE Platform 버전 24의 기준 구현으로, JDK 릴리스 프로세스(JEP 3) 를 통해 출시됨
[JEP별 요약]
-
JEP 404: Generational Shenandoah (실험적)
- Shenandoah GC에서 세대별 수집을 지원하여 성능 개선
-
JEP 450: Compact Object Headers (실험적)
- HotSpot JVM에서 객체 헤더 크기를 96~128비트에서 64비트로 줄임
- 힙 크기 감소, 배포 밀도 향상 및 데이터 지역성 개선 효과 기대
-
JEP 472: Prepare to Restrict the Use of JNI
-
JNI(Java Native Interface) 사용 시 경고 추가
- 외부 함수 및 메모리(FFM) API에서 일관된 경고 제공
- 향후 JNI 및 FFM API의 사용 제한을 대비해 경고 제공
- 애플리케이션에서 필요할 경우 선택적으로 인터페이스 활성화 가능
-
JEP 475: Late Barrier Expansion for G1
- G1 가비지 컬렉터의 Barrier 구현 간소화
- C2 JIT 컴파일러의 초기 단계에서 후반 단계로 Barrier 확장 시점 조정
-
JEP 478: Key Derivation Function API (미리보기)
- 암호화 키 파생 기능을 제공하는 Key Derivation Function (KDF) API 도입
- 비밀 키 및 기타 데이터를 통해 추가 키 파생 가능
-
JEP 483: Ahead-of-Time Class Loading & Linking
- 핫스팟 JVM 시작 시 애플리케이션 클래스 즉시 사용 가능
- 한 번 실행 시 로드 및 링크된 상태를 캐시에 저장해 이후 실행 시 빠른 시작 가능
-
JEP 484: Class-File API
- Java 클래스 파일의 파싱, 생성 및 변환을 위한 표준 API 제공
-
JEP 485: Stream Gatherers
- Stream API에 사용자 정의 중간 연산 지원
- 기존 중간 연산으로는 어려운 데이터 변환 가능
-
JEP 486: Permanently Disable the Security Manager
- 보안 관리자는 클라이언트 측 코드에서 주된 보안 수단이 아니었음
- Java 17(JEP 411)에서 제거 예정으로 비활성화 조치
- 보안 관리자 API는 향후 릴리스에서 완전히 제거 예정
-
JEP 487: Scoped Values (네 번째 미리보기)
- 스레드 내에서 불변 데이터를 자식 스레드와 공유하는 Scoped Values 도입
- 스레드 로컬 변수보다 메모리 및 시간 비용 절감 가능
- 가상 스레드 및 구조적 동시성과 함께 사용 시 성능 개선 기대
-
JEP 488: Primitive Types in Patterns, instanceof, and switch (두 번째 미리보기)
- 패턴 매칭에서 기본 타입 지원
-
instanceof 및 switch에서 모든 기본 타입 사용 가능
-
JEP 489: Vector API (아홉 번째 인큐베이터)
- 벡터 연산을 위한 API 도입
- 벡터 명령어로 컴파일되어 스칼라 연산보다 성능 향상 기대
-
JEP 490: ZGC: Remove the Non-Generational Mode
- ZGC의 비세대 모드를 제거하고 세대 모드를 기본값으로 설정
-
JEP 491: Synchronize Virtual Threads without Pinning
-
synchronized 구문에서 가상 스레드가 플랫폼 스레드를 해제하도록 개선
- 가상 스레드가 플랫폼 스레드에 고정되지 않게 하여 성능 및 확장성 개선
-
JEP 492: Flexible Constructor Bodies (세 번째 미리보기)
- 명시적 생성자 호출(super(..), this(..)) 전에 문장 허용
- 인스턴스가 완전히 초기화되기 전에 필드 초기화 가능
-
JEP 494: Module Import Declarations (두 번째 미리보기)
- 모듈에서 내보낸 패키지를 간단하게 가져오는 선언 추가
- 모듈화된 라이브러리의 재사용 간소화
-
JEP 495: Simple Source Files and Instance Main Methods (네 번째 미리보기)
- 초보자도 쉽게 작성할 수 있는 간단한 소스 파일 및 메서드 지원
- 복잡한 코드 없이 간단한 프로그램 작성 가능
-
JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
-
양자 저항성 Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM) 도입
- 대칭 키 보안을 강화하고 양자 컴퓨팅 공격에 대비
-
JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
-
양자 저항성 Module-Lattice-Based Digital Signature Algorithm (ML-DSA) 도입
- 데이터 위변조 방지 및 서명자 인증 강화
- 향후 양자 컴퓨팅 공격 대응
-
JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe
-
sun.misc.Unsafe의 메모리 접근 메서드 사용 시 경고 제공
- VarHandle API 및 FFM API로 마이그레이션 권장
-
JEP 499: Structured Concurrency (네 번째 미리보기)
- 관련 작업 그룹을 단일 작업 단위로 처리하는 구조적 동시성 도입
- 오류 처리 및 취소 간소화, 신뢰성 및 가시성 개선
[JDK 24 신규 기능 요약]
-
Configurable New Session Tickets Count for TLSv1.3
- 새 시스템 속성 jdk.tls.server.newSessionTicket 추가
- JSSE 서버에서 TLSv1.3 재개 티켓 수를 설정 가능 (0~10 범위)
- 기본값은 1로 설정됨
- 명령어 예제:
java -Djdk.tls.server.newSessionTicket=2
-
Mechanism to Disable TLS Cipher Suites by Pattern Matching
-
java.security 설정 파일에서 jdk.tls.disabledAlgorithms 속성을 통해 TLS 암호화 제품군 비활성화 가능
- 패턴 매칭 지원 (_ 와일드카드 사용 가능)
- 예제: "TLS_RSA_*"는 TLS_RSA로 시작하는 모든 암호 제품군 비활성화
-
New Option to Extract a JAR File to a Specific Directory Using the jar Tool
-
jar 도구에 새로운 --dir 및 -C 옵션 추가
- 특정 디렉토리에 JAR 파일의 내용을 추출 가능
- 예제:
jar -xf foo.jar -C /tmp/bar/
jar --extract --file foo.jar --dir /tmp/bar/
-
New Reader.of(CharSequence) Method
- 새로운 정적 팩토리 메서드 java.io.Reader.of(CharSequence) 추가
-
String, StringBuilder 등에서 효율적으로 읽기 지원
-
New Method Process.waitFor(Duration)
-
java.lang.Process#waitFor(Duration) 메서드 추가
- 기존 waitFor()에서 단위 설정의 혼란 방지
-
Support for Unicode 16.0
- Unicode 16.0 지원 추가
- 총 154,998자 및 7개 신규 스크립트 추가
- Garay (서아프리카)
- Gurung Khema, Kirat Rai, Ol Onal, Sunuwar (인도 및 네팔)
- Todhri (알바니아)
- Tulu-Tigalari (인도 남서부)
-
New JAR Command Option to Not Overwrite Existing Files
-
jar 도구에 --keep-old-files 및 -k 옵션 추가
- 기존 파일 덮어쓰기 방지 가능
- 예제:
jar xkf foo.jar
jar --extract --keep-old-files --file foo.jar
-
New MXBean to Monitor and Manage Virtual Thread Scheduler
-
jdk.management.VirtualThreadSchedulerMXBean 인터페이스 추가
- 가상 스레드 스케줄러 상태 및 병렬 처리 모니터링 가능
- 스케줄러의 목표 병렬성을 동적으로 변경 가능
-
New jcmd Commands Thread.vthread_scheduler and Thread.vthread_pollers
-
jcmd 도구에 새로운 명령 추가
-
Thread.vthread_scheduler: 스레드 스케줄러 상태 출력
-
Thread.vthread_pollers: I/O 폴러 상태 출력
-
Support for Including Security Properties Files
-
java.security 설정 파일에서 다른 속성 파일 포함 가능
-
include <파일 경로> 사용
-
include 키워드는 속성 이름으로 사용할 수 없음
-
Document Standard Hash and MGF Algorithms for RSASSA-PSS Signature
- RSASSA-PSS 서명에서 사용할 수 있는 표준 해시 및 메시지 생성 함수 문서화
-
SunPKCS11 Provider Is Enhanced to Use CKM_AES_CTS Mechanism
- SunPKCS11 공급자에서 AES/CTS 변환 지원 추가
- 새로운 설정 속성 cipherTextStealingVariant 추가 (CS1, CS2, CS3)
- NSS의 경우 기본값은 CS1로 설정됨
-
New Summary Page for External Specifications
- Java SE 및 JDK API에서 참조하는 외부 명세를 한눈에 볼 수 있는 요약 페이지 추가
-
jpackage Supports WiX Toolset v4 and v5 on Windows
-
jpackage에서 WiX Toolset v4 및 v5 지원 추가
- 최신 설치 버전을 자동 선택
- WiX v3 포맷의 사용자 정의 소스를 v4 포맷으로 자동 변환
-
Add W3C DTDs and XSDs to the JDK Built-in Catalog
- JDK의 내장 XML 카탈로그에 W3C의 DTD 및 XSD 추가
- 네트워크 없이 로컬에서 로딩 가능
- 추가된 항목:
- xml 네임스페이스
- XML Schema Part 1 & 2
- XHTML 1.0 & 1.1
- W3C XML 명세 DTD