본문 바로가기
FullStack/21. Java

Java 11 변경 내용

by nakanara 2022. 1. 1.
반응형

유니코드 10 지원

16,018명의 새로운 캐릭터, 18개의 새로운 블록, 10개의 새로운 스크립트

httpClient 표준화

JDK9, 10에서 jdk.incubator.http로 인큐베이팅되었던 내용이 java.net.http.HttpClien으로 표준화

Collection.toArray(IntFunction) 추가

java.util.Collection 추가, 기존 stream으로 받아서 처리해야 하던 부분을 Collection으로 처리 가능

@Test
public void Test(){
    List<String> list = Arrays.asList("NYC", "New Delhi");

    // Java 8
    String[] array = list.stream()
            .toArray(String[]::new);
    System.out.println(Arrays.toString(array));

    // Java 11
    String[] array1 = list.toArray(String[]::new);
    System.out.println(Arrays.toString(array1));
}

Lazy Allocation of Compiler Threads 기능 추가

  • 컴파일 스레드는 기본적으로 켜져 있으며, 계층화된 컴파일 모드에서 VM이 사용 가능한 메모리와 컴파일 요청수와 상관없이 많은 수의 리소스를 컴파일러에게 할당 시작하기 때문에 메모리를 비효율적으로 사용
  • -XX:+UseDynamicNumberOfCompilerThreads 옵션을 사용하여 컴파일 스레드가 효율적으로 동작하도록 변경

ZGC A Scalable Low-Latency Garbage Collector 실험용

  • 기존 Garbage Collector의 저지연, 동시 가비지 수집기로 Z Garbage Collector(ZGC)
    • 가바지를 위한 중지 시간이 10ms 초과하지 않음
    • heap 또는 live-set size의 크기에 따라 일시 중지 시간이 증가하지 않음
    • 수 테라바이트 크기 처리 가능
  • Java의 스레드가 실행 중에도 작업이 이루어지기 때문에, 애플리케이션의 응답 속도에 미치는 큰 영향 없음
  • ZGC는 실험 기능으로 활성화를 위해서는 -XX:+UnlockExperimentalVMOptions, -XX:+UseZGC 옵션으로 활성화
  • Linux/x64에서만 사용 가능
  • Graal과 함께 ZGC를 사용하는 것은 지원되지 않음

Epsilon, A No-Op Garbage Collector

  • Epsilon GC는 새로운 실험적 무작동 가비지 수집기, 메모리 할당만 진행, 회수는 하지 않음

Low-Overhead Heap Profiling

  • 시스템 부하가 적은 힙 프로파일 기능 제공
    • 지속적으로 활성화 가능하도록 낮은 오버 헤더
    • 인터페이스(JVMTI)를 통하여 접근 가능
    • 할당된 모든 자원 샘플링 가능(특정 영역, 특정 방식으로 할당된 자원을 제한하지 않음)
    • 독립적 방식으로 정의 가능(특정 GC 또는 VM 구현에 의존하지 않음)
    • Live, Dead 객체에 대한 정보 제공

Nest-Based Access Control

  • JVM에서 클래스와 인터페이스를 중첩해서 사용 가능하지만, 중첩으로 사용된 유형에서 private Field, private Method의 접근 권한을 각 클래스에서 관리하여, 중첩 클래스에서 상위 객체로 접근이 불가능했던 부분을 nest라는 새로운 액세스 제어 컨텍스트를 통하여 지원
  • https://sejoung.github.io/2018/09/2018-09-27-JEP_181/#JEP-181-Nest-Based-Access-Control

ChaCha20 및 Poly1305 암호화 알고리즘 지원

  • ChaCha20 및 ChaCha20-Poly1305 암호를 구현

TLS 1.3 지원

Lambda 매개 변수로 로컬 변수 지원

  • Local-Variable Syntax for Lambda Parameters
  • var keyword로 람다 매개변수를 선언할 때와 local variable 선언하여 사용 가능
  • var 타입을 유추하여 지원
  • 람다 매개 변수로 var 선언시 해당 람다의 모든 변수는 var 타입 사용
var arrInteger = new Integer[]{5, 9, 3, 6, 2, 4, 8, 7, 1};
long cnt = Arrays.stream(arrInteger).filter(
        (@Nonnull var a) -> (a != null && a > 5)).count();
System.out.println(cnt);

Thread.destroy() 및 Thread.stop(Throwable) 메서드 제거

Nashorn JavaScript 엔진 사용 중단

  • Nashorn JavaScript 스크립트 엔진과 API, jjs 도구는 향후 릴리스에서 제거할 가능성
  • Nashorn 엔진과 jjs셸 도구는 사용 중단에 대한 경고 메시지가 표시되며, --no-deprecation-warning 옵션으로 메시지 비활성화

이 외에도 변경되거나 비활성화된 내용이 더 존재하며, https://www.oracle.com/java/technologies/javase/11-relnote-issues.html에서 관련 정보의 확인이 가능

참고

반응형