Java 11

Jinseok Lee·2019년 10월 30일
4
post-thumbnail
post-custom-banner

새로운기능

Nest-based access controls

  1. 설명
  • Nest 기반 접근제어
  • 논리적으로는 같은 클래스를 분리된 클래스로 컴파일 가능 (무슨 말인지 모르겠음)
  • 중첩 클래스 간 (nest mates), private 접근제어자로 선언된 변수라도 reflect 가능, java8에서 IllegalAccessException
  1. 예제
import java.lang.reflect.Field;
public class HelloWorld {
    
    	public static class NestClass1 {
          private int var;

          public void f() throws Exception {
              final NestClass2 nest2 = new NestClass2();

              // this is ok
              nest2.var = 2;

              // this is not ok in java8
              final Field f2 = NestClass2.class.getDeclaredField("var");
              f2.setInt(nest2, 2);
              System.out.println(f2.getInt(nest2));
          }

    	}
    
      public static class NestClass2 {
          private int var;
      }
    
      public static void main(String []args) throws Exception {
          new NestClass1().f();
      }
}
  1. 결과 비교
  • java11

image.png

  • java8 (IllegalAccessException)

image.png

ZGC (Z Garbage Collector)

  1. 설명
  • 디폴트는 아닌 것으로 보임 (디폴트는 G1)
  • 사용하려면 configuration을 해줘야 함
  1. 목표
  • pause time 10ms 이하
  • 힙사이즈에 비례하여 pause time 증가하지 않음
  • G1 보다 애플리케이션 처리량이 15% 이상 떨어지지 않을 것
  • 애플리케이션 스레드의 실행을 중지하지 않음
  1. 지원
  • Linux/x64 지원
  • Linux/AArch64 JDK 13부터
  • Windows, macOS 지원예정(in progress)

image.png

  1. 사용법
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC sourcefile 
  1. 사용예제
    HelloZGC.java
class HelloZGC { 
    public static void main(String[] args) { 
        	System.out.println("Say hello to new low pause GC - ZGC!"); 
    	} 
}

macOS 테스트
image.png
Linux/x64 테스트 (ubuntu 18.04 in docker container)
image.png

  1. 성능비교 (G1GC vs Parallel vs ZGC)
    image.pngimage.png

스크린샷 출처: http://cr.openjdk.java.net/~pliden/slides/ZGC-FOSDEM-2018.pdf
처리량도 나쁘지 않고 pause time은 압도적으로 빠른 것으로 나타남

HTTP Clinet(Standard)

  • java.net.http HTTP/1.1, HTTP/2 지원

TSL 1.3

  • TLS 1.3 버전 구현

Local-Variable Syntax for Lambda Parameters 업데이트

  1. 설명
  • 자바 10에서 도입된 var 타입 추론 업데이트
  • 로컬에서만 사용가능
  1. 사용예제

    public class HelloWorld
    {
           public static void main(String[] args)
           {
             var name = "name";
             System.out.println(name);
           }
    }

### New Version-String Scheme
 1. 구조
  - <major>.<minor>.<security>
  
 1. 사용
  - 기존 Java SE 8u231
  - 변경 Java 11.0.5

## 지원 중단 (Depreciations)
- Java EE and CORBA Modules
- Web Start
- Applets
- JavaFX
- JavaEE module 
- Pack200 Tools and API
- Concurrent Mark Sweep (CMS) Garbage Collector

## 참고
### 웹문서
- [Main - ZGC - OpenJDK Wiki](https://wiki.openjdk.java.net/display/zgc/Main)
- [JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)](https://openjdk.java.net/jeps/333)
- [The Z Garbage Collector](http://cr.openjdk.java.net/~pliden/slides/ZGC-FOSDEM-2018.pdf)
- [Java의 var - 기계인간 John Grib](https://johngrib.github.io/wiki/java10-var/)
- [JEP 181: Nest-Based Access Control | 폭간의 기술블로그](https://sejoung.github.io/2018/09/2018-09-27-JEP_181/#JEP-181-Nest-Based-Access-Control)

profile
전 위메프, 이직준비중
post-custom-banner

9개의 댓글

comment-user-thumbnail
2021년 4월 30일

좋은 포스팅 잘봤습니다 :)

1개의 답글

나이슈~~

1개의 답글
comment-user-thumbnail
2021년 4월 30일

퍼가요~❤️

답글 달기
comment-user-thumbnail
2021년 4월 30일

요정님?요정님?

1개의 답글
comment-user-thumbnail
2021년 4월 30일

머지는 안하고!!

1개의 답글