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 |