2018.11.09

JDK 12 베타, 자바 12에 적용되는 새로운 기능

Paul Krill | InfoWorld
자바 SE의 다음 버전인 자바 개발 키트(Java Development Kit, JDK) 12의 첫 베타 빌드(빌드 18)가 리눅스, 윈도우, 맥OS용으로 나왔다.


Credit: Getty Images Bank

베타 JDK 12 빌드 다운로드 위치
Java.net 웹사이트에서 베타 JDK 12 빌드를 다운로드할 수 있다.

피드백 수집을 위해 만들어지는 오픈소스 빌드의 기능 중에는 2019년 3월 19일로 예정된 프로덕션 릴리스에서 빠지는 기능도 포함될 수 있다. 또한 수정되지 않은 보안 취약점이 존재할 수 있으며 오라클 지원을 받을 수 없다.

자바 12에 계획된 새로운 기능
- 개선된 시작, CDS 및 가비지 수집
64비트 플랫폼에서 기본 클래스 목록을 사용해 기본 클래스 데이터 공유(Class Data-SharingCDS) 아카이브를 생성하도록 JDK 빌드 프로세스가 향상된다. 목적은 기본 시작 시간을 포함하고 CDS의 이점을 활용하기 위해 -Xshare:dump를 실행할 필요가 없도록 하는 데 있다. 또한 JDK 빌드를 수정해서 이미지 링크 후 java-xshare:dump를 실행한다.

가비지 수집 힙 시간을 튜닝해 일반적인 사례의 메모리 레이아웃을 개선하기 위한 부가적인 명령줄 옵션도 포함될 수 있다. 애플리케이션 클래스와 다양한 가비지 수집 구성이 포함된 맞춤형 클래스 목록과 같은 고급 요구사항이 있는 사용자는 계속해서 맞춤형 CDS 아카이브를 만들 수 있다.

- ARM 포트 수 감소
자바 12에서 ARM 프로세서를 위한 포트는 2개가 아닌 1개가 된다. 계획은 32비트 ARM 및 64비트 aarch64를 보존하면서 arm64 포트와 관련된 모든 소스를 없애는 것이다. 이 포트를 제거하면 기여자들은 하나의 64비트 ARM 구현에 집중하고 2개 포트를 유지 관리하는 데 따르는 중복 작업을 없앨 수 있다. 지금은 JDK에 2개의 64비트 ARM 포트가 있다.

- 스위치 익스프레션(Switch expressions)
베타 스위치 익스프레션 기능은 switch 구문을 확장해 구문 또는 식으로 사용할 수 있도록 한다. 이를 통해 코딩을 간소화할 수 있다. 두 형식 모두 "전통적인" 또는 "간소화된" 범위 및 흐름 제어 동작을 사용할 수 있게 된다. 이런 변화를 통해 "일상적인" 코딩이 더 간소화되고 switch에서 패턴 매칭(pattern matching)을 사용하기 위한 기반을 마련했다.

자바 제작자들이 패턴 매칭을 지원하도록 전환함에 따라 기존 switch 문의 불일치가 장애물이 된다. 여기에는 switch 블록의 기본 흐름 제어 동작, 블록이 단일 범위로 취급되는 switch 블록의 기본 범위 지정, 문으로만 작동하는 switch 등이 포함된다.

현재 자바의 switch 문 동작은 기본적으로 C++와 같은 언어와 거의 비슷하고 fallthrough 의미 체계를 지원한다. 이 흐름 제어는 저수준 코드를 작성하는 데 유용하다. 그러나 switch가 더 높은 수준의 컨텍스트에서 사용되면 특유의 잦은 오류로 인해 유연함으로 얻는 이점이 무의미해진다.

원시 문자열 리터럴
베타 원시 문자열 리터럴은 \n과 같은 이스케이프 시퀀스 또는 /uXXX 형식의 유니코드 이스케이프를 해석하지 않으면서 여러 줄의 소스 코드를 포괄할 수 있다. 자바 제작자들이 염두에 두고 있는 이 기능의 목적은 여러 가지다.

- 자바 이외의 문법을 대상으로 하는 문자열을 입력할 때 자바 단순화(Java Simplification) 없이 읽을 수 있는 형식으로 문자 시퀀스를 표현하기가 쉬워짐
- 새 라인을 나타내는 특수한 표식 없이 몇 줄의 소스코드를 포괄하는 문자열 입력
- 동일한 문자열을 기존 문자열 리터럴로 표현할 수 있는 기능(플랫폼별 줄바꿈 문자 제외)
- 이스케이프의 현재 javac 문자열 리터럴 해석을 복제하고 왼쪽 여백 자르기를 관리하기 위한 라이브러리 지원

자바 12 개발자들은 현실적인 자바 코드에는 유니코드 이스케이핑, 백슬래시 또는 새 줄을 특별히 처리하는 과정 없이 리터럴 문자열을 있는 그대로 캡처하기 위한 메커니즘이 필요하다고 말한다. 원시 문자열 리터럴은 자바 이스케이프와 자바 줄바꿈 문자 사양을 접어두고 대부분의 상황에서 기존 문자열 리터럴보다 더 읽기 쉽고 유지 관리가 용이한 문자 시퀀스를 제공한다.

자바는 원시 문자열에 대한 언어 수준의 지원이 없는 극소수 언어 가운데 하나다. 이 제안으로 새로운 문자열 연산자가 도입되지는 않을 것이다. 또한 원시 문자열 리터럴은 문자열 보간을 직접 지원하지도 않는다. 기존 문자열 보간은 변화 없이 그대로 유지된다.

기본 벤치마크 모음
자바 개발 키트(JDK) 12에는 플랫폼의 소스코드에 추가되는 기본적인 벤치마크 모음이 포함될 것으로 보인다. 목적은 개발자가 더 쉽게 기존 벤치마크를 실행하거나 새 벤치마크를 제작하도록 하는 것이다.

2014년 7월에 만들어져 2018년 11월 초에 업데이트된 마이크로벤치마크 모음 제안의 기반에는 자바 및 다른 JVM 언어로 작성된 벤치마크 제작을 위한 자바 마이크로벤치마크 하네스(Java Microbenchmark Harness, JMH)가 있다. 이 모음은 하나의 디렉터리에 JDK 소스코드와 함께 위치하며, 개발자는 손쉽게 새 벤치마크를 추가할 수 있다.

새 JDK 기능을 위한 벤치마크를 제공하거나 JDK의 모든 요소를 포괄하는 일체의 벤치마크 집합을 만드는 것을 목표로 하지는 않는다.

자바 12 계획에는 빌드 시간 증가, 새 벤치마크에서 잠재적인 테스트 불안정성, 소스코드 저장소 크기 증가와 같은 위험 요소도 있다. 그러나 벤치마킹 모음은 일반적인 JDK 빌드에는 필요 없고 별도의 빌드 타겟이 된다. 잠재적인 테스트 불안정성에 대처하기 위해 새 벤치마크에는 철저한 테스트가 필요할 것이다.

이 제안에 따르면, 벤치마크를 개발하고 요구 사항을 기술하는 방법을 설명하는 새 페이지를 wiki.openjdk.java.net에 만들어야 한다. 이러한 요구 사항은 코딩 표준, 재현 가능한 성능, 문서화를 의무화한다. editor@itworld.co.kr



2018.11.09

JDK 12 베타, 자바 12에 적용되는 새로운 기능

Paul Krill | InfoWorld
자바 SE의 다음 버전인 자바 개발 키트(Java Development Kit, JDK) 12의 첫 베타 빌드(빌드 18)가 리눅스, 윈도우, 맥OS용으로 나왔다.


Credit: Getty Images Bank

베타 JDK 12 빌드 다운로드 위치
Java.net 웹사이트에서 베타 JDK 12 빌드를 다운로드할 수 있다.

피드백 수집을 위해 만들어지는 오픈소스 빌드의 기능 중에는 2019년 3월 19일로 예정된 프로덕션 릴리스에서 빠지는 기능도 포함될 수 있다. 또한 수정되지 않은 보안 취약점이 존재할 수 있으며 오라클 지원을 받을 수 없다.

자바 12에 계획된 새로운 기능
- 개선된 시작, CDS 및 가비지 수집
64비트 플랫폼에서 기본 클래스 목록을 사용해 기본 클래스 데이터 공유(Class Data-SharingCDS) 아카이브를 생성하도록 JDK 빌드 프로세스가 향상된다. 목적은 기본 시작 시간을 포함하고 CDS의 이점을 활용하기 위해 -Xshare:dump를 실행할 필요가 없도록 하는 데 있다. 또한 JDK 빌드를 수정해서 이미지 링크 후 java-xshare:dump를 실행한다.

가비지 수집 힙 시간을 튜닝해 일반적인 사례의 메모리 레이아웃을 개선하기 위한 부가적인 명령줄 옵션도 포함될 수 있다. 애플리케이션 클래스와 다양한 가비지 수집 구성이 포함된 맞춤형 클래스 목록과 같은 고급 요구사항이 있는 사용자는 계속해서 맞춤형 CDS 아카이브를 만들 수 있다.

- ARM 포트 수 감소
자바 12에서 ARM 프로세서를 위한 포트는 2개가 아닌 1개가 된다. 계획은 32비트 ARM 및 64비트 aarch64를 보존하면서 arm64 포트와 관련된 모든 소스를 없애는 것이다. 이 포트를 제거하면 기여자들은 하나의 64비트 ARM 구현에 집중하고 2개 포트를 유지 관리하는 데 따르는 중복 작업을 없앨 수 있다. 지금은 JDK에 2개의 64비트 ARM 포트가 있다.

- 스위치 익스프레션(Switch expressions)
베타 스위치 익스프레션 기능은 switch 구문을 확장해 구문 또는 식으로 사용할 수 있도록 한다. 이를 통해 코딩을 간소화할 수 있다. 두 형식 모두 "전통적인" 또는 "간소화된" 범위 및 흐름 제어 동작을 사용할 수 있게 된다. 이런 변화를 통해 "일상적인" 코딩이 더 간소화되고 switch에서 패턴 매칭(pattern matching)을 사용하기 위한 기반을 마련했다.

자바 제작자들이 패턴 매칭을 지원하도록 전환함에 따라 기존 switch 문의 불일치가 장애물이 된다. 여기에는 switch 블록의 기본 흐름 제어 동작, 블록이 단일 범위로 취급되는 switch 블록의 기본 범위 지정, 문으로만 작동하는 switch 등이 포함된다.

현재 자바의 switch 문 동작은 기본적으로 C++와 같은 언어와 거의 비슷하고 fallthrough 의미 체계를 지원한다. 이 흐름 제어는 저수준 코드를 작성하는 데 유용하다. 그러나 switch가 더 높은 수준의 컨텍스트에서 사용되면 특유의 잦은 오류로 인해 유연함으로 얻는 이점이 무의미해진다.

원시 문자열 리터럴
베타 원시 문자열 리터럴은 \n과 같은 이스케이프 시퀀스 또는 /uXXX 형식의 유니코드 이스케이프를 해석하지 않으면서 여러 줄의 소스 코드를 포괄할 수 있다. 자바 제작자들이 염두에 두고 있는 이 기능의 목적은 여러 가지다.

- 자바 이외의 문법을 대상으로 하는 문자열을 입력할 때 자바 단순화(Java Simplification) 없이 읽을 수 있는 형식으로 문자 시퀀스를 표현하기가 쉬워짐
- 새 라인을 나타내는 특수한 표식 없이 몇 줄의 소스코드를 포괄하는 문자열 입력
- 동일한 문자열을 기존 문자열 리터럴로 표현할 수 있는 기능(플랫폼별 줄바꿈 문자 제외)
- 이스케이프의 현재 javac 문자열 리터럴 해석을 복제하고 왼쪽 여백 자르기를 관리하기 위한 라이브러리 지원

자바 12 개발자들은 현실적인 자바 코드에는 유니코드 이스케이핑, 백슬래시 또는 새 줄을 특별히 처리하는 과정 없이 리터럴 문자열을 있는 그대로 캡처하기 위한 메커니즘이 필요하다고 말한다. 원시 문자열 리터럴은 자바 이스케이프와 자바 줄바꿈 문자 사양을 접어두고 대부분의 상황에서 기존 문자열 리터럴보다 더 읽기 쉽고 유지 관리가 용이한 문자 시퀀스를 제공한다.

자바는 원시 문자열에 대한 언어 수준의 지원이 없는 극소수 언어 가운데 하나다. 이 제안으로 새로운 문자열 연산자가 도입되지는 않을 것이다. 또한 원시 문자열 리터럴은 문자열 보간을 직접 지원하지도 않는다. 기존 문자열 보간은 변화 없이 그대로 유지된다.

기본 벤치마크 모음
자바 개발 키트(JDK) 12에는 플랫폼의 소스코드에 추가되는 기본적인 벤치마크 모음이 포함될 것으로 보인다. 목적은 개발자가 더 쉽게 기존 벤치마크를 실행하거나 새 벤치마크를 제작하도록 하는 것이다.

2014년 7월에 만들어져 2018년 11월 초에 업데이트된 마이크로벤치마크 모음 제안의 기반에는 자바 및 다른 JVM 언어로 작성된 벤치마크 제작을 위한 자바 마이크로벤치마크 하네스(Java Microbenchmark Harness, JMH)가 있다. 이 모음은 하나의 디렉터리에 JDK 소스코드와 함께 위치하며, 개발자는 손쉽게 새 벤치마크를 추가할 수 있다.

새 JDK 기능을 위한 벤치마크를 제공하거나 JDK의 모든 요소를 포괄하는 일체의 벤치마크 집합을 만드는 것을 목표로 하지는 않는다.

자바 12 계획에는 빌드 시간 증가, 새 벤치마크에서 잠재적인 테스트 불안정성, 소스코드 저장소 크기 증가와 같은 위험 요소도 있다. 그러나 벤치마킹 모음은 일반적인 JDK 빌드에는 필요 없고 별도의 빌드 타겟이 된다. 잠재적인 테스트 불안정성에 대처하기 위해 새 벤치마크에는 철저한 테스트가 필요할 것이다.

이 제안에 따르면, 벤치마크를 개발하고 요구 사항을 기술하는 방법을 설명하는 새 페이지를 wiki.openjdk.java.net에 만들어야 한다. 이러한 요구 사항은 코딩 표준, 재현 가능한 성능, 문서화를 의무화한다. editor@itworld.co.kr



X