Java 24 / JDK 24 출시(GA)

16 hours ago 1

  • 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

Read Entire Article