본문 바로가기
Java

[Java] JDK11 특징

by 가드 2022. 11. 9.
728x90

Amazon Linux2에서 JDK8을 지원하지 않을뿐더러 앞으로도 JDK8은 더 이상 지원되지 않으며 사용자는 JDK11로 전환을 권고하고 있다. Amazon Linux1도 deprecated 되므로 Amazon Linux2로 변경을 하면서 자연스럽게 JDK11로 업그레이드를 해야 했다.

Amazon Linux2 & JDK11로 변경하면서 다행히 아무런 문제 없이 전환을 완료되었다. 아마 JDK8에서 사용되었던 API 및 패키지에 대한 변경 건은 없어 보였다.

이번 전환 작업을 하면서 문뜩 든 생각이 JDK11에 대한 특징을 잘 알지 못한 것이었다. 그래서 이 참에 특징에 대해서 스터디 후 기록해야겠다.

 

중요한 특징부터 살펴보면

ZGC (Z Garbage Collectors)

이번 JDK11에서 GC에 대한 개선과 변화를 가져왔다. 특징으로는

  • GC의 일시 중지 시간은 10ms 미만이다.
  • Heap의 크기가 증가하더라도 정지 시간이 증가하지 않는다.
  • 작은 크기 ~ 매우 큰 크기(8MB ~ 16TB) 범위의 Heap을 처리한다.
  • G1에 비한 애플리케이션 처리량이 15% 이상 감소하지 않는다.

즉, ZGC는 G1보다 짧은 레이턴시를 가지면서 G1에 비해 뒤처지지 않는 처리율을 가지는 게 가장 큰 특징이다.

 

JVM으로 구동되는 애플리케이션의 경우 GC가 동작할 때 STW(Stop-The-World)로 인해 성능에 큰 영향 미쳐왔다.

그래서 GC의 정지 시간을 짧을수록 애플리케이션의 성능 향상 기여하기 마련이다. 

그래서 이번 ZGC의 경우 Load Barrier와 Colored Pointer를 함께 사용하여 Thread 동작 중에도 ZGC가 객체 재배치 같은 작업을 수행할 수 있다.

ZGC 메모리는 ZPages라 불리는 영역으로 나누게 된다. ZPages는 동적 사이즈로 2MB의 배수가 다이나믹하게 생성 및 삭제될 수 있다.

(Smaill : 2MB, Medium : 32MB, Large : N * 2MB)

zgc

ZGC Heap

http://cr.openjdk.java.net/~pliden/slides/ZGC-FOSDEM-2018.pdf 를 보면 테스트 결과를 볼 수 있는데

zgc heap

- G1에 비해 일시 정지시간이 압도적으로 짧았다.

zgc

- G1에 비해 처리율도 좋았다.

 

Local-Variable Syntax for Lambda Parameters

JDK11부터 var를 람다 표현식에 쓰는 경우 전달되는 파라미터들의 타입을 추론할 수 있는 기능이 추가됐다.

(var s1, var s2) -> s1 + s2

 지역 변수와 람다 매개변수 모두에서 var 사용이 균일해진다.

 

Http Client의 변화

JDK9에서 추가되었고 JDK10에서 업데이트되었던 java.net.http 패키지가 표준화가 되었다. 특징으로는

  • Non-Blocking Request And Response를 지원한다. (with CompletableFeature)
  • Backpressure 지원 (java.util.concurrent.flow 패키지를 통해 Rx flow를 구현체에 적용)
  • Http/2 지원
  • Factory Method 형태로 지원
  • Websocket 지원

가장 큰 특징은 Http/2를 지원하고 비동기 프로그래밍이 가능해졌다는 것이고 기본값으로 Http/2로 설정되나 Http/2를 지원하지 않으면 자동으로 Http/1.1로 전환된다.

 

https://openjdk.org/groups/net/httpclient/ 예제를 참고해보자.

300x250

댓글