[F-Lab 모각코 챌린지] 39일차 - Java 9 ~ 17 정리
F-Lab 모각코 챌린지 39일차. Java 9 ~ 17 의 업데이트 기록을 정리하였습니다. JEP 를 기준으로 정리 하였으며 설명이 부족하다고 판단되는 부분들은 추가적으로 설명을 첨부하였습니다.
![[F-Lab 모각코 챌린지] 39일차 - Java 9 ~ 17 정리](/content/images/size/w1200/2023/07/f_lab_mogacko.png)
Java 9 (2017)
- JEP 261: 모듈 시스템 (Project Jigsaw) 도입
- JEP 222: JShell 도입으로 REPL 기능 제공
- JEP 264: 새로운 플랫폼 로깅 API 및 서비스
- JEP 266: Reactive Streams과 관련된 흐름 API 추가
Java 10 (2018)
- JEP 286: 지역 변수의 타입 추론 (
var
키워드) - JEP 304: Garbage-First(G1) GC 성능 개선
- JEP 314: 추가 유니코드 언어 태그 확장
Java 11 (2018)
- JEP 330: 단일 파일 소스 코드 프로그램을 직접 실행 (shebang 파일 지원)
- JEP 335: ZGC 도입
- JEP 321: HTTP 클라이언트 API 표준화
- JEP 309: Dynamic Class-File Constants.
동적으로 클래스 파일 상수를 생성하고 조작할 수 있는 기능 - JEP 318: Epsilon: A No-Op Garbage Collector 추가
아무것도 수행하지 않는 가비지컬렉터로, 가비지컬렉터를 제외한 성능 측정이나 일회성 애플리케이션에서 사용 - JEP 328: Flight Recorder 제공
자바 애플리케이션과 JVM 의 실행 시간 정보를 수집하는 프로파일링 도구
Java 12 (2019)
- JEP 334: JVM Constants API
JVM 의 상수 풀을 다룰 수 있는 API 추가. 객체를 상수풀에 올릴 수 있으며 여러 클래스를 지원 - JEP 230: Microbenchmark Suite 추가
JDK의 성능을 평가하고 회귀 분석을 수행하는데 사용. JMH(Java Microbenchmarking Harness: 자바의 벤치마크 프레임워크) 를 JDK 에 추가하여 성능 분석, 모니터링 등의 지원을 강화하였다. - JEP 325: Switch 표현식 강화 (Preview)
String dayOfWeek = switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
case 4 -> "Thursday";
case 5 -> "Friday";
case 6, 7 -> "Weekend";
default -> throw new IllegalArgumentException("Invalid day: " + day);
};
- JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental).
가비지 컬렉터의 실험적 알고리즘. 목표는 힙 메모리가 커도 STW 를 최소화 하는 것. 애플리케이션의 반응성 향상에 도움됨.
옵션 활성화:-XX:+UseShenandoahGC
- JEP 346: G1GC 에서 미사용 커밋된 메모리를 빠르게 반환(메모리를 비움) 하도록 최적화
Java 13 (2019)
- JEP 355: 텍스트 블록 (멀티 라인 문자열) 추가 (Preview)
- JEP 351: ZGC 성능 향상
- JEP 353: Socket API 재구현
- JEP 354: Switch Expressions (Second Preview).
String result = switch (number) {
case 1 -> {
System.out.println("Number is 1");
yield "One"; // 값의 반환을 위해 사용. 이제 break 사용 안해도 됨.
}
case 2 -> {
System.out.println("Number is 2");
yield "Two";
}
default -> "Unknown";
};
Java 14 (2020)
- JEP 359: 레코드 (record) 클래스 도입 (Preview)
- JEP 361: Switch Expressions 표준 기능 채택
- JEP 368: 텍스트 블록 기능 개선
- JEP 305: instanceof 키워드를 활용한 Pattern Matching 추가 (Preview)
- JEP 343: 애플리케이션 패키징 도구 추가 (Incubator)
(Incubator 뜻: 아직 표준화 아님)
Java 애플리케이션을 네이티브 패키지 형식으로 패키징 할 수 있음
Java 15 (2020)
- JEP 378: ZGC를 제품 단계로 승격
- JEP 383: 외부 메모리 접근 API (Second Incubator)
자바 힙 외부에 있는 메모리에 효율적으로 접근할 수 있는 API 추가. 이전에는 JNI 를 사용해서 수행했는데, 성능 오버헤드가 있었음. - JEP 384: Records (Second Preview).
- JEP 375: instanceof 키워드를 활용한 Pattern Matching (Second Preview).
Java 16 (2021)
- JEP 338: 벡터 연산 API 추가 (Incubator)
- JEP 394: Pattern Matching for instanceof.
- JEP 376: ZGC의 동시적 스레드 처리 개선.
- JEP 387: Elastic Metaspace를 통한 메모리 사용 최적화.
메타 영역의 메모리 최적화. - JEP 395: Records가 표준 기능으로 채택.
Java 17 (2021)
- JEP 356: 랜덤 숫자 생성을 위한 새로운 API.
- JEP 382: macOS의 새로운 렌더링 파이프라인 Metal.
- JEP 411: Security Manager와 다른 종속 API들을 폐기 예정으로 표시.
- JEP 391: macOS의 OpenGL 렌더링 파이프라인 폐기.
- JEP 389: 외부 메모리 액세스를 위한 Foreign Function & Memory API (Incubator)
JEP 370 -> JEP 383 -> JEP 389 순으로 발전