2019.11.06

JDK 14에 추가될 신기능 3가지

Paul Krill  | InfoWorld
자바 개발 키트(Java Development Kit, JDK) 14가 계속해서 기능을 개선하고 있다. 3가지 기능이 공식적으로 추가됐고, 그 외 몇 가지도 추가될 예정이다.
 
ⓒ Getty Images Bank

스위치 식(switch expressions), 누마-어웨어 메모리 할당(NUMA-aware memory allocation) 등이 새로 제안됐고, 현재 공식화된 기능은 JFR(JDK Flight Recorder) 이벤트 스트리밍과 비휘발성 메모리 매핑 바이트버퍼 등이다. JDK 14는 자바의 6개월 출시 간격에 따라 2020년 3월 17일 정식으로 배포될 예정이다. 현재까지 JDK 14가 공식 목표로 정한 기능은 다음과 같다.

- JFR 이벤트 스트리밍은 인-프로세스 및 아웃-오브-프로세스 애플리케이션으로부터 JFR 데이터를 지속해서 처리하는 API를 제공한다. JFR은 실행 중인 자바 애플리케이션의 프로파일링 및 진단 데이터를 수집하는 툴이다. 제안된 이벤트 스트리밍은 비-스트리밍 사례와 동일한 이벤트 세트를 기록하고, 오버헤드는 1% 미만이다. 이벤트 스트리밍은 디스크 기반 및 메모리 기반의 비-스트리밍 리코딩과 공존해야 한다.

이 기능이 제안된 것은 핫스팟 가상 머신(VM)이 JFR을 이용해 500개 이상의 데이터 포인트를 방출하는 상황 때문이다. 이들 대부분은 로그 파일 데이터를 분석해야만 이용할 수 있다. 현재, 이용자는 직접 리코딩을 시작하고, 정지하고, 콘텐츠를 디스크로 덤프한 후 리코딩 파일을 분석해야 한다.

이는 애플리케이션 프로파일링에는 적합하지만, 데이터의 동적 업데이트를 표시하는 대시보드 등 모니터링을 위해서는 어울리지 않는다. 디스크 리포지터리로부터 데이터를 복사해 별개의 리코딩 파일로 만드는 등 리코딩 생성 시 오버헤드가 있을 수 있다. 새 리코딩 파일을 생성할 필요 없이 디스크 리포지터리로부터 데이터를 읽을 수 있게 되면 오버헤드가 크게 줄어들 것으로 기대된다.

- NullPoint Exceptions의 개선 계획은 어떤 변수가 무효인지 정확히 기술해 JVM에 의해 생성된 예외의 이용성을 향상하는 것과 관계된다. 이를 제안한 사람들은 개발자에게 유용한 정보를 제공하고, 프로그램의 조기 종료에 대해 지원하고, 동적 예외를 정적 프로그램 코드와 더 명확히 연결해 프로그램에 대한 이해가 향상될 것으로 기대하고 있다. 개발자의 NullPoint Exceptions에 대한 혼란과 우려를 줄이는 효과도 기대된다.

- 비휘발성 메모리 매핑 바이트버퍼는 새로운 JDK 전용 파일 매핑 모드를 추가해 파일 채널 API가 MappedByteBuffer 인스턴스를 생성하는 데 쓰일 수 있도록 허용한다. 비휘발성 메모리(NVM)를 이용하면 프로그래머가 프로그램 프로세스에 걸쳐 프로그램 스테이트를 구축하고 갱신할 수 있다. 이를 통해 아이옵스(input and output operations)에서 일반적으로 요구되는 상당한 복사 또는 전환 작업이 발생하지 않는다. 이는 트랜잭션 프로그램에서 특히 중요하다.

결국 JDK 강화 제안의 1차 목표는 클라이언트가 자바 프로그램에서 일률적이고 효율적으로 NVM에 액세스하고 업데이트할 수 있도록 보장하는 것이다. 2차 목표는 Unsafe 클래스에서 정의된 제한적 JDK 내부 API를 이용해 이 커밋 동작을 실행하는 것이다. 따라서 이는 NVM으로 커밋해야 할 수 있는 MappedByteBuffer 외의 클래스에 의해 재사용될 수 있다. 모니터링 및 관리를 위해 기존의 API가 NVM에 매핑된 버퍼를 추적하는 것도 가능해진다. 사용할 수 있는 OS/CPU 플랫폼은 리눅스/ x64와 리눅스/AArch64이다.

한편 다음 기능은 JDK 14를 겨냥해 제안됐다. 11월 7일 끝나는 심의 기간에 논의될 예정이다.

- 스위치 식은 구문이나 식 어느 것으로도 사용될 수 있도록 switch를 확장해 코딩을 단순화한다. 스위치 식은 JDK14에서 새로 추가될 예정이고, JDK12, JDK 13에서 사전 검토된 바 있다. 또한 스위치 식은 switch에서 패턴 매칭의 이용도 고려한다. 이를 통해 개발자는 객체로부터 더 간단하고 안전하게 컴포넌트를 조건부로 추출할 수 있다.
- G1 가비지 컬렉터를 위한 누마-어웨어 메모리 할당(NUMA-aware memory allocation). 대형 머신에서 G1 성능을 향상하기 위한 것이다.
- 컨커런트 마크 스윕(Concurrent Mark Sweep, CMS) 가비지 컬렉터의 제거. 과거에 이는 사용이 권장되지 않았고 제거될 예정이었다. CMS를 승계하는 ZGC(Z Garbage Collector), 셰넌도어(Shenandoah) 등이 등장했다.
- ZGC를 맥OS와 윈도우로 이식. 이는 지금까지 리눅스에서만 지원됐다.
- 팩 200 및 언팩 200 툴, 그리고 Java.util.jar 패키지에 있는 팩 200 API의 제거. 이들은 모두 자바 SE 11에서 사용이 권장되지 않았다. 향후 제거하려는 계획이었다. 팩 200은 JAR 파일을 위한 압축 체계이다.

리눅스, 윈도우, 맥OS용의 오픈소스 JDK 14 베타 빌드는 jdk.java.net에서 다운로드할 수 있다. ciokr@idg.co.kr


2019.11.06

JDK 14에 추가될 신기능 3가지

Paul Krill  | InfoWorld
자바 개발 키트(Java Development Kit, JDK) 14가 계속해서 기능을 개선하고 있다. 3가지 기능이 공식적으로 추가됐고, 그 외 몇 가지도 추가될 예정이다.
 
ⓒ Getty Images Bank

스위치 식(switch expressions), 누마-어웨어 메모리 할당(NUMA-aware memory allocation) 등이 새로 제안됐고, 현재 공식화된 기능은 JFR(JDK Flight Recorder) 이벤트 스트리밍과 비휘발성 메모리 매핑 바이트버퍼 등이다. JDK 14는 자바의 6개월 출시 간격에 따라 2020년 3월 17일 정식으로 배포될 예정이다. 현재까지 JDK 14가 공식 목표로 정한 기능은 다음과 같다.

- JFR 이벤트 스트리밍은 인-프로세스 및 아웃-오브-프로세스 애플리케이션으로부터 JFR 데이터를 지속해서 처리하는 API를 제공한다. JFR은 실행 중인 자바 애플리케이션의 프로파일링 및 진단 데이터를 수집하는 툴이다. 제안된 이벤트 스트리밍은 비-스트리밍 사례와 동일한 이벤트 세트를 기록하고, 오버헤드는 1% 미만이다. 이벤트 스트리밍은 디스크 기반 및 메모리 기반의 비-스트리밍 리코딩과 공존해야 한다.

이 기능이 제안된 것은 핫스팟 가상 머신(VM)이 JFR을 이용해 500개 이상의 데이터 포인트를 방출하는 상황 때문이다. 이들 대부분은 로그 파일 데이터를 분석해야만 이용할 수 있다. 현재, 이용자는 직접 리코딩을 시작하고, 정지하고, 콘텐츠를 디스크로 덤프한 후 리코딩 파일을 분석해야 한다.

이는 애플리케이션 프로파일링에는 적합하지만, 데이터의 동적 업데이트를 표시하는 대시보드 등 모니터링을 위해서는 어울리지 않는다. 디스크 리포지터리로부터 데이터를 복사해 별개의 리코딩 파일로 만드는 등 리코딩 생성 시 오버헤드가 있을 수 있다. 새 리코딩 파일을 생성할 필요 없이 디스크 리포지터리로부터 데이터를 읽을 수 있게 되면 오버헤드가 크게 줄어들 것으로 기대된다.

- NullPoint Exceptions의 개선 계획은 어떤 변수가 무효인지 정확히 기술해 JVM에 의해 생성된 예외의 이용성을 향상하는 것과 관계된다. 이를 제안한 사람들은 개발자에게 유용한 정보를 제공하고, 프로그램의 조기 종료에 대해 지원하고, 동적 예외를 정적 프로그램 코드와 더 명확히 연결해 프로그램에 대한 이해가 향상될 것으로 기대하고 있다. 개발자의 NullPoint Exceptions에 대한 혼란과 우려를 줄이는 효과도 기대된다.

- 비휘발성 메모리 매핑 바이트버퍼는 새로운 JDK 전용 파일 매핑 모드를 추가해 파일 채널 API가 MappedByteBuffer 인스턴스를 생성하는 데 쓰일 수 있도록 허용한다. 비휘발성 메모리(NVM)를 이용하면 프로그래머가 프로그램 프로세스에 걸쳐 프로그램 스테이트를 구축하고 갱신할 수 있다. 이를 통해 아이옵스(input and output operations)에서 일반적으로 요구되는 상당한 복사 또는 전환 작업이 발생하지 않는다. 이는 트랜잭션 프로그램에서 특히 중요하다.

결국 JDK 강화 제안의 1차 목표는 클라이언트가 자바 프로그램에서 일률적이고 효율적으로 NVM에 액세스하고 업데이트할 수 있도록 보장하는 것이다. 2차 목표는 Unsafe 클래스에서 정의된 제한적 JDK 내부 API를 이용해 이 커밋 동작을 실행하는 것이다. 따라서 이는 NVM으로 커밋해야 할 수 있는 MappedByteBuffer 외의 클래스에 의해 재사용될 수 있다. 모니터링 및 관리를 위해 기존의 API가 NVM에 매핑된 버퍼를 추적하는 것도 가능해진다. 사용할 수 있는 OS/CPU 플랫폼은 리눅스/ x64와 리눅스/AArch64이다.

한편 다음 기능은 JDK 14를 겨냥해 제안됐다. 11월 7일 끝나는 심의 기간에 논의될 예정이다.

- 스위치 식은 구문이나 식 어느 것으로도 사용될 수 있도록 switch를 확장해 코딩을 단순화한다. 스위치 식은 JDK14에서 새로 추가될 예정이고, JDK12, JDK 13에서 사전 검토된 바 있다. 또한 스위치 식은 switch에서 패턴 매칭의 이용도 고려한다. 이를 통해 개발자는 객체로부터 더 간단하고 안전하게 컴포넌트를 조건부로 추출할 수 있다.
- G1 가비지 컬렉터를 위한 누마-어웨어 메모리 할당(NUMA-aware memory allocation). 대형 머신에서 G1 성능을 향상하기 위한 것이다.
- 컨커런트 마크 스윕(Concurrent Mark Sweep, CMS) 가비지 컬렉터의 제거. 과거에 이는 사용이 권장되지 않았고 제거될 예정이었다. CMS를 승계하는 ZGC(Z Garbage Collector), 셰넌도어(Shenandoah) 등이 등장했다.
- ZGC를 맥OS와 윈도우로 이식. 이는 지금까지 리눅스에서만 지원됐다.
- 팩 200 및 언팩 200 툴, 그리고 Java.util.jar 패키지에 있는 팩 200 API의 제거. 이들은 모두 자바 SE 11에서 사용이 권장되지 않았다. 향후 제거하려는 계획이었다. 팩 200은 JAR 파일을 위한 압축 체계이다.

리눅스, 윈도우, 맥OS용의 오픈소스 JDK 14 베타 빌드는 jdk.java.net에서 다운로드할 수 있다. ciokr@idg.co.kr


X