[Java] Java 11 특징

Java 11 

  • Open JDK와 Oracle JDK를 통합한 버전으로, Oracle JDK가 구독형 유료 모델로 전환되었습니다.
  • 2026년 9월까지 지원합니다.
  • Spring Boot 2.7.x, Spring Framework 5.3.x

추가된 기능

1. 람다 지역변수 var 키워드

- 데이터 유형을 지정하지 않고, 변수를 선언하고 정의할 수 있으며 컴파일러는 할당된 데이터 유형에 따라 데이터 유형을 결정하게 됩니다.

(@NonNull var s1, @Nullable var s2) -> s1 + s2

 

2. 새로운 HTTPClient API

- Java HttpClient API는 최신 HTTP 표준의 클라이언트를 구현하며, 동기 및 비동기 프로그래밍 모델인 HTTP/1.1 및 HTTP/2를 지원합니다.

- 기본적으로 HTTP/2를 사용하고, 서버가 HTTP/2를 지원하지 않는 경우 자동으로 HTTP/1.1로 다운그레이드 됩니다.

 

[동기 요청]

// HttpClient 생성
HttpClient client = HttpClient.newHttpClient();

// HttpRequest 생성
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(serverUrl))
        .build();

// HTTP 요청 보내고 응답 받음
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

// 응답 출력
System.out.println(response.statusCode());
System.out.println(response.body());

 

[비동기 요청]

// HttpClient 생성
HttpClient client = HttpClient.newHttpClient();

// HttpRequest 생성
HttpRequest request = HttpRequest.newBuilder()
	.uri(URI.create(serverUrl))
	.build();

// 비동기적으로 HTTP 요청 보내고 응답 받기
CompletableFuture<HttpResponse<String>> futureResponse = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());

// CompletableFuture의 작업이 완료될 때 처리할 콜백 등록
futureResponse.thenAccept(response -> {
	System.out.println("Response status code: " + response.statusCode());
	System.out.println(response.body());
});

 // 비동기 작업이 완료될 때까지 대기
 futureResponse.join();

 

 

3. G1 GC

- Java 8 버전까지는 Parallel GC, Java 9 이후 G1 GC가 기본 GC로 변경되었습니다.

- G1 GC

  • 대용량의 메모리가 있는 멜티 프로세서 시스템을 위해 제작되었습니다. 빠른 처리 속도를 지원합니다.
  • 전체 힙을 일정 크기 영역으로 나누고, 각 영역에서 가장 많은 Garbage를 가진 영역을 우선 수집합니다.
  • Garbage로 가득찬 영역을 빠르게 회수하여 빈 공간을 확보합니다.

 

4. ZGC - 차세대 Garbage Collector

- 실험적 기능으로 추가되었습니다.

- 빠른 어플리케이션 응답 속도에 알맞지만, 메모리가 많이 여유로운 상황에서 이용합니다.

- 새로운 영역을 할당해 그 곳에 객체를 이동시키는 Compact 전략을 이용합니다. 하지만, 기존 객체와 새로운 객체 간의 값의 동기화가 제대로 이루어지지 않을 수 있기 때문에 이를 위해 동기화 작업을 지속적으로 수행합니다.

  • 이전 garbage collector: 메모리를 region이라는 논리적인 단위로 구분
  • ZGC: 메모리를 Zpage라는 논리적인 단위로 구분
    • ZPage에는 small, medium, lagre 타입이 있고, 각 타입별로 들어갈 수 있는 object 크기가 제한됩니다. 또한, ZPage에는 단 하나의 객체만 할당할 수 있습니다.
  • Colored Pointers: 42bit는 메모리의 주소, 4bit는 GC metadata (finalizable, remap, mark1, mark0) 를 저장하는 용도로 사용합니다.
  • Load Barrier: JIT에 의해 주입되는 것으로, 어플리케이션 진행과 동시에 압축을 수행합니다.

 

5. 소스 파일 실행

- javac로 java 소스파일을 컴파일하지 않고 java 명령어를 사용하여 파일을 실행할 수 있습니다.

// 기존 방식
// 소스파일 컴파일 후 컴파일된 바이트코드를 JVM 상에서 실행 
$ javac TestClass.java
$ java TestClass

// java11 이후
$ java TestClass.java

 

 

'BackEnd > Java' 카테고리의 다른 글

[Java] Java 21 특징  (3) 2024.07.15
[Java] Java 17 특징  (0) 2024.06.24
[Java] Java 8 특징  (0) 2024.06.21
[Java] Virtual Thread  (0) 2024.06.06