본문 바로가기

java

jAVA11에 새로 바뀐것들을 알아보자.

[배경]

자바를 공부하면서 java8 이후에 나온 중요한 릴리즈 중에 하나인 java11에 대해 더 깊게 알아보려고 한다.


[내용]

1. String 관련 메서드 추가

Java 8 에서 부족했던 문자열 관련 메서드들이 추가되었다.

  • isBlank()
    • 문자열이 비어있거나, 빈 공백으로만 이루어져 있으면 true 를 리턴하는 메서드
  • lines()
    • 문자열을 줄 단위로 분리하여 Stream 형태로 리턴하는 메서드
  • strip(), stripLeading(), stripTrailing()
    • 문자열의 앞뒤, 앞쪽, 뒤쪽 공백을 제거하는 메서드
  • repeat(int count)
    • 문자열을 주어진 횟수(count)만큼 반복하여 새로운 문자열을 생성하는 메서드

 

 

2. 새로운 표준 HTTP 클라이언트 API 도입

  • 표준 API

이전의 HttpURLConnectionHttpClient 는 JDK 에 포함되어 있지 않아 별도의 라이브러리를 추가로 관리해야 했지만, Java 11 의 HTTP 클라이언트는 표준 API 로 제공되기 때문에 JDK 에 포함되어 있습니다.

 

  • HTTP/2, WebSocket 지원

Java 11 이전에도 HTTP/2 와 WebSocket 은 지원되었지만, Java 11 의 새로운 HTTP 클라이언트 API 는 이들을 더욱 편리하게 사용할 수 있도록 개선되었습니다.

 

  • 비동기 지원

비동기 및 동기 요청을 모두 처리할 수 있습니다. 비동기 요청은 CompletableFuture 를 통해 처리됩니다.

 

3. 람다 파라미터에서 var 키워드 이용

Java 10 에서 도입된 var 키워드를 람다 파라미터에서 이용할 수 있게 되었다.

list.stream() 
	.map((@NotNull var s) -> s.toLowerCase()) 
	.collect(Collectors.toList());

 

4. java 명령어로 Java 파일 실행

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

 

$ javac HelloWorld.java
$ java HelloWorld 
Hello Java 8!

 

$ java HelloWorld.java
Hello Java 11!

 

5. Garbage Collector 관련

Java 11의 기본 가비지 수집기는 G1GC(G1 가비지 수집기)다. G1GC의 목표는 대기 시간과 처리량 간의 균형을 유지하는 것이다. G1 가비지 수집기는 높은 확률의 일시 중지 시간 목표를 충족하여 높은 처리량을 달성하려고 시도한다. G1GC는 전체 컬렉션을 방지하도록 설계되었지만 동시 컬렉션이 메모리를 충분히 빨리 회수할 수 없는 경우 전체 GC 대체가 발생한다. 전체 GC는 젊고 혼합된 컬렉션과 동일한 수의 병렬 작업자 스레드를 사용한다.

  • ZGC (Z Garbage Collector): 매우 낮은 지연 시간의 가비지 컬렉터가 추가되어, 대규모 애플리케이션의 성능을 향상시키고, GC로 인한 지연을 최소화할 수 있다.
  • Epsilon GC: 실험적인 가비지 컬렉터로, 메모리 할당만 수행하고 가비지 컬렉션을 하지 않음으로써, 테스트 및 벤치마킹 목적으로 유용하다.

 


[결과]

Java 11의 이러한 변경 사항들은 개발자에게 더 나은 성능, 보안성, 생산성을 제공하며, 최신 표준과 기술을 활용할 수 있게 해준다. 주요 특징으로는 GC 관련 변경사항이 눈에띄는 데 ZGC, Epsilon GC 등 기존의 G1GC 와는 다른 새로운 가비지 컬렉터로 다음번에 어떤 차이가 있고 어떤 동작을 하는 지  더 알아봐야겠다.

 

 

[출처 및 참조]