Java12 Releases notes

2020-09-07

Index

JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)

실행중인 Java 스레드와 동시에 비우기 작업을 수행하여 GC 일시 중지 시간을 줄이는 Shenandoah라는 새로운 GC (가비지 수집) 알고리즘이 추가됨. Shenandoah의 일시 중지 시간은 힙 크기와 무관(힙이 200MB이든 200GB이든 일관된 일시 중지 시간이 동일함).

JEP 230: Microbenchmark Suite

JDK 소스 코드에 기본 마이크로 벤치 마크 제품군을 추가하면 개발자가 기존 마이크로 벤치 마크를 쉽게 실행하고 새 마이크로 벤치 마크를 쉽게 만들 수 있다.

JEP 325: Switch Expressions (Preview)

switch문 또는 식으로 사용할 수 있도록 문을 확장하고 두 양식 모두 “전통적인”또는 “단순화 된”범위 지정 및 제어 흐름 동작을 사용할 수 있다. Preview 이므로 --enable-preview 옵션을 줘야 사용할 수 있는 기능이다.
참고 :이 JEP는 JDK 13을 대상으로 하는 JEP 354 로 대체 된다.

현재 Java switch명령문 의 디자인은 C 및 C ++와 같은 언어를 밀접하게 따르고 있다.
예를 들어, 다음 코드에서 많은 break문은 불필요하게 장황하게 만든다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}

아래와 같이 개선할 수 있다.

1
2
3
4
5
6
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}

switch 문은 Statement에서 Expression 으로 바뀐다. 아래와 같이 Return 값을 받을 수 있다.

1
2
3
4
5
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;

아직 Preview단계이나 상당히 기대되는 변화 중 하나다.

JEP 340: One AArch64 Port, Not Two

ARM 포트가 1개가 된다. 32bit와, 64bit 를 유지하면서 arm64 port와 관련된 모든 소스를 제거한다.
그렇게 되면 하나의 64bit ARM 구현을 하고 2개 포트를 유지 관리하는 데 따르는 중복 작업을 없앨 수 있다.