ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 11 Features
    java 2019. 5. 12. 13:27

    개요


    자바 11이 출시되면서 새롭게 등장한 feature들을 정리해본다.  

    (OpenJDK 기준)

    출시일: 2018-09-25

     

    특징


    1. Nest-Based Access Control


    class Test {  
        static class Nest1 {  
            private int nest1Var; 
         } 
         static class Nest2 {  
            private int nest2Var;  
        }
     }

    위와 같이 nested class의 경우, 'Test', 'Nest1', 'Nest2'는 모두 'nestmate'이다. 기존 JVM 상에서는 nestmate끼리 private 멤버 변수를 접근하려면 컴파일러가 중간에 bridge method를 만들어야 했다. 따라서, reflection을 사용하여 nestmate class의 private 멤버 변수에 접근하려고 하면, llegalAccessException이 발생한다. 이러한 모순을 해결하고자, 새로운 'nest'라는 class file 개념을 도입해 하나의 중첩 클래스이지만 서로 다른 클래스파일로 분리하여 bridge method의 도움 없이도 서로의 private 멤버에 접근할 수 있도록 하였다.

     

    참고: http://openjdk.java.net/jeps/181

     

     

    2. Dynamic Class-File Constants


    constantDynamic이라는 새 JVM 바이트코드 명세를 추가하였다. constantDynamic은 JVM 7에 도입되었던invokeDynamic과 비슷하지만 invokeDynamic으로 상수를 처리하기에는 불필요한 오버헤드가 많이 발생하여 새 명세의 필요성에 따라 추가되었다. (invokeDynamic은 대표적으로 람다의 구현에 쓰인다.)

     

    constantDynamic이 invokeDynamic과 다른 점

    1. Condy는 상수를 다룬다. Indy에서 사용하는 CallSite, MethodHandle 객체가 필요하지 않다.

    2. Condy linkage 상태가 공유된다.

      

    constantDynamic in Java 11

    1. Null

    2. Enum Constants

    3. Primitive type mirrors(ex. int.class)

    4. VarHandles

     

    참고: 

    http://openjdk.java.net/jeps/309

    https://www.youtube.com/watch?v=knPSQyUtM4I

     

     

    3. Epsilon: A No-Op Garbage Collector


    Epsilon이라는 새 GC를 도입(아직 실험 단계)하였다. Epsilon은 오직 메모리 할당만 담당하고, 메모리 재배치는 하지 않는다. 사용 용도는 퍼포먼스 테스팅과 매우 짧은 생명을 가진 application에 적용 가능하다.

     

    참고: http://openjdk.java.net/jeps/318

     

     

    4. HTTP Client (Standard)


    Java 9 때 도입되었던 HTTP Client API를 표준화하였다. HTTP Client API는 비동기 방식으로 작동하고, http2 프로토콜을 지원한다는 특징을 갖고 있다.

     

     

    5. Local-Variable Syntax for Lambda Parameters


    Java 10 때 'var' 변수가 도입되었다. 그러나 람다식의 parameter에는 사용하지 못했다.

    통일성을 위해 람다식의 parameter에도 'var'타입으로 선언할 수 있도록 하였다. 아래는 같은 의미이다.

    (var x, var y) → x.process(y)        ==        (x,y) → x.process(y)

    아래처럼 'var'변수 사용과 미사용을 혼용할 수는 없다.

    (var x, y) → x.process(y)   (X)

    아래의 경우도 불가하다.

    (var x, int y) → x. process(y) (X)

     

    참고: http://openjdk.java.net/jeps/323

     

     

    6. Flight Recorder


    troubleshooting, monitoring, profiling을 위해 application, jvm, os 상에서 발생하는 이벤트들을 기록한다. 기존 툴에 비해 low overhead를 가진다.

     (Oracle JDK에서는 이전 버전부터 이미 제공하던 툴)

    참고: http://openjdk.java.net/jeps/328

     

     

    7. Lunch Single-File Source-Code Programs


    java HelloWorld.java

    위 명령어로 실행이 가능해진다.

     

    참고: http://openjdk.java.net/jeps/330

     

     

    8. ZGC: A Scalable Low-Latency Garbage Collector


    자바 쓰레드가 수행 중에 실행되는 concurrent garbage collector이다. (아직 실험 단계) ZGC는 다음과 같은 goal을 가지고 있다.  

    정지 시간이 10ms을 초과하지 않는다.

    정지 시간이 heap or live-set size에 따라 증가하지 않는다.

    몇 백 메가바이트에서 수 테라바이트 사이즈까지의 힙을 핸들한다.

     

    아직 실험 단계로, 다음과 같은 제약사항을 지닌다.  

    Linux/x64에서만 이용 가능

    XX:+UseCompressedOops and -XX:+UseCompressedClassPointers options을 사용할 수 없음

    XX:+ClassUnloadingWithConcurrentMark option을 사용할 수 없음

     

    ZGC 사용법: -XX:+UnlockExperimentalVMOptions -XX:+UseZGC을 붙여서 사용

     

    참고: http://openjdk.java.net/jeps/333

     

     

    9. 기타 특징


    추가 설명이 필요하지 않다고 여겨지는 것들을 아래에 나열한다.  

     

    1. Java EE, CORBA 모듈 삭제 - http://openjdk.java.net/jeps/320

     

    2. Curve25519, Curve448라는 key agreement scheme 구현 - http://openjdk.java.net/jeps/324

     

    3. 유니코드10을 지원하도록 기존 api 업그레이드 - http://openjdk.java.net/jeps/327

     

    4. ChaCha20, Poly1305 암호화 암고리즘 구현 - http://openjdk.java.net/jeps/329

     

    5. low overhead를 갖는 heap profiling - http://openjdk.java.net/jeps/331

     

    6. tls 1.3 구현 - http://openjdk.java.net/jeps/332

     

    7. Deprecate Nashorn Javascript engine - http://openjdk.java.net/jeps/335

     

    8. Deprecate Pack200 tools and API - http://openjdk.java.net/jeps/336

     

     

    참고


    http://openjdk.java.net/projects/jdk/11/

    https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#NewFeature

    https://medium.com/antelabs/what-is-new-in-java-11-442af9315f07

    https://www.youtube.com/watch?v=knPSQyUtM4I

     

    'java' 카테고리의 다른 글

    Java equals() & hashcode()  (0) 2019.05.13
    Java Lambda  (0) 2019.05.12
    Java 10 Features  (0) 2019.05.12

    댓글

Designed by Tistory.