Pattern matching
instanceof가 향상되었다. 14부턴 파라미터 체크과 동시에 할당할 수 있다.
이로써 더 쓰기 좋고 가독성이 좋아졌다.
if(animal instanceof Dog dog){
dog.balk();
} else if(animal instanceof Lion lion){
lion.balk();
}
이전버전까지는 타입검사만 하고 따로 캐스팅을 해서 객체를 만들었어야 했다.
if(animal instanceof Dog){
Dog dog = (Dog) animal;
dog.balk();
} else if(animal instanceof Lion lion){
Lion lion = (Lion) animal;
lion.balk();
}
Packaging tool (incubator)
jpackage --input target/ \
--name JPackageDemoApp \
--main-jar JPackageDemoApp.jar \
--main-class com.baeldung.java14.jpackagedemoapp.JPackageDemoApp \
--type dmg \
--java-options '--enable-preview'
NUMA-Aware Memory Allocation for G1
참고자료 : https://sangheon.github.io/2020/11/03/kor-g1-numa.html
JFR Event Streaming
Android Studio의 프로파일러를 생각하면 편할 듯 하다.
Configuration c = Configuration.getConfiguration("default");
try (var rs = new RecordingStream(c)) {
rs.onEvent("jdk.GarbageCollection", System.out::println);
rs.onEvent("jdk.CPULoad", System.out::println);
rs.onEvent("jdk.JVMInformation", System.out::println);
rs.start();
}
Non-Volatile Mapped Byte Buffers
Helpful NullPointerExceptions
String name = person.personDetails.name;
를 실행한 경우
Exception in thread "main" java.lang.NullPointerException: Cannot read field "name" because "person.personDetails" is null
at Main.main(Main.java:6)
와 같이 어디서 null이 나온건지 알 수 있다.
Records
코틀린의 데이터 클래스를 생각하면 된다. 순수하게 데이터를 보유하기 위한 특수 클래스다.
JDK 14에선 Preview였기에 제대로 지금 사용하려면 Jdk 16+이상에서 사용할 수 있다.
json serialize도 간단하게 적용할 수 있는 것 같다.
record Person(
String name,
Integer age
){}
Switch Expressions (Standard)
스위치 문이 좀 더 쓰기 좋게 개선되었다.
switch (day) {
case "MONDAY":
case "FRIDAY":
case "SUNDAY":
letter = 6;
break;
case "TUESDAY":
letter = 7;
break;
case "THURSDAY":
case "SATURDAY":
letter = 8;
break;
case "WEDNESDAY":
default:
letter = 0;
}
int letter = switch (day) {
case "MONDAY", "FRIDAY", "SUNDAY" -> 6;
case "TUESDAY" -> 7;
case "THURSDAY", "SATURDAY" -> 8;
case "WEDNESDAY", default -> 0;
};
Deprecate the Solaris and SPARC Ports
Remove the Concurrent Mark Sweep (CMS) Garbage Collector
CMS GC가 삭제되었고 G1이 기본으로 변경되었다. G1은 이번 JDK14에서 NUMA가 적용되었다.
ZGC in Windows
Deprecate the ParallelScavenge + SerialOld GC Combination
Remove the Pack200 Tools and API
Text Blocks (Second Preview)
멀티 라인으로 문자열을 작성할 때 매우 좋은 기능이다.
String query = "SELECT \"name\", \"email\" FROM \"users\"\n" +
"WHERE \"username\" = 'kbh';";
String query = """
SELECT "name", "email" FROM "users"
WHERE "username" = 'kbh';
""";
이처럼 매우 간단해졌다.Foreign-Memory Access API (Incubator)
다양한 유형의 외부메모리에서 작동이 가능하다.
기존의 ByteBuffer와 Unsafe Api 두가지 방식 모두 단점이 있기에 극복하고자 나옴