Java 11

2022. 1. 6. 00:43Java/버전별 변화

추가된 기능

새로운 HTTP Client 추가

새로운 HTTP Client가 추가되었습니다. 새로운 HTTP Client는 성능적으로 개선되었고, HTTP/1.1과 HTTP/2 프로토콜을 모두 지원하고 있습니다.

HttpClient httpClient = HttpClient.newBuilder()
  .version(HttpClient.Version.HTTP_2)
  .connectTimeout(Duration.ofSeconds(20))
  .build();
HttpRequest httpRequest = HttpRequest.newBuilder()
  .GET()
  .uri(URI.create("http://localhost:" + port))
  .build();
HttpResponse httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
assertThat(httpResponse.body()).isEqualTo("Hello from the server!");

Nest 기반의 접근 제어

기존의 클래스 내부의 필드나 메소드에 접근하기 위한 방법은 크게 2가지 방법이 있었습니다.

  • bridge 메소드를 이용한 접근
  • Reflection을 이용한 접근

애플리케이션의 크기가 커짐에 따라 bridge 메소드를 이용한 접근은 개발자들에게 혼란을 줄 때도 있었습니다. 그리고 Reflection의 경우에는 private 접근 제어자를 가진 필드에 직접 접근하기 불편한 부분이 있습니다.

그래서 이러한 부분을 편리하게 만들기 위해 Nest 기반의 접근 제어를 새로 추가했습니다. 최상단의 Class를 Nest Host라고 명명합니다. 그리고 선언된 Nest Class들을 Nest Member라고 합니다. 각 Nest Class들 간에는 private 필드나 메소드에 대해 자유롭게 직접 접근할 수 있습니다.

import java.lang.reflect.Field;

public class JEP181 {

    public static class Nest1 {

        private int varNest1;

        public void f() throws Exception {

            final Nest2 nest2 = new Nest2();
            nest2.varNest2 = 2;
            System.out.println(nest2.varNest2);

        }

    }

    public static class Nest2 {
        private int varNest2;
    }

    public static void main(String[] args) throws Exception {

        new Nest1().f();

    }

}

위의 코드를 보면 최상단에 있는 JEP181Nest Host가 되고 Nest1Nest2Nest Member가 됩니다. Java 11 버전 이전에는 다음과 같은 프로그램이 실행되면 에러가 발생했습니다. 하지만 Nest 기반 제어 덕분에 Nest Class들 간에는 자유롭게 직접 접근을 할 수 있게 되었습니다.

ZGC

새로운 GC인 ZGC가 실험적으로 도입되었습니다. ZGC는 정지 시간이 최대 10ms를 초과하지 않고 Heap의 크기가 증가하더라도 정지 시간이 증가하지 않으며, 다양한 범위의 Heap을 처리할 수 있는 목표를 가지고 있습니다.

ZGC 설명 바로가기

성능 개선

No-Op Garbage Collector

Java 11버전부터 실험적으로 No-Op GC가 도입되었습니다. No-Op GC는 메모리는 할당하지만 실제 GC는 발생하지 않습니다. 그렇기 때문에 No-Op GC는 운영 환경에서 동작을 위해 쓰이기 보다는 메모리 에러를 테스트하기 위해 사용하도록 권장하고 있습니다.

728x90

'Java > 버전별 변화' 카테고리의 다른 글

Java 17  (0) 2022.08.23
Java 15  (0) 2021.10.07
Java 14  (0) 2021.09.25
Java 13  (0) 2021.09.19
Java 12  (0) 2021.09.06