JDK 10 : Java 10의 새로운 기능

Java Standard Edition 10의 구현 인 JDK 10은 2018 년 3 월 20 일에 릴리스되었습니다. 주요 개선 사항에는 지역 변수 유형과 가비지 수집 및 컴파일 개선 사항이 포함됩니다.

JDK 10은 단기 릴리스 일 뿐이며 JDK 10의 공개 업데이트는 6 개월 후에 종료 될 예정입니다. 9 월에 예정된 JDK 11은 Java의 장기 지원 (LTS) 버전이 될 것입니다. LTS 릴리스는 3 년마다 제공됩니다.

Oracle은 Java 릴리스에 대해 6 개월의 릴리스주기를 설정했습니다. 릴리스의 연도 및 월을 기준으로이 업그레이드 및 후속 버전의 이름을 지정할 계획이 있었으며 첫 번째 릴리스는 Java 18.3이라고합니다. 그러나 이러한 계획은 이의가 제기 된 후 폐기되었습니다.

Java JDK 10 다운로드 위치

Oracle 웹 사이트에서 JDK 10을 다운로드 할 수 있습니다.

JDK 10의 새롭고 향상된 기능

JDK 10의 주요 기능은 다음과 같습니다.

  • 지역 변수 유형 추론, 이니셜 라이저를 사용하여 유형 추론을 지역 변수 선언으로 확장하기 위해 Java 언어를 향상시킵니다.
  • 최악의 지연 시간을 개선하기 위해 G1 가비지 수집기에 대한 병렬 전체 가비지 수집.
  • 시작 시간과 공간을 최적화하기위한 애플리케이션 클래스 데이터 공유. 기존 클래스-데이터 공유 기능이 확장되어 애플리케이션 클래스를 공유 아카이브에 배치 할 수 있습니다.
  • 실험적인 Just-in-time 컴파일러 Graal은 Linux / x64 플랫폼에서 사용할 수 있습니다.
  • Docker 인식. Linux 시스템에서 실행하는 경우 JVM (Java Virtual Machine)은 Docker 컨테이너에서 실행 중인지 여부를 인식합니다. 컨테이너 특정 정보 (컨테이너에 할당 된 CPU 수 및 총 메모리)는 운영 체제를 쿼리하는 대신 JVM에서 추출됩니다. (Java 프로세스에 사용 가능한 CPU 수는 지정된 프로세서 세트, 공유 또는 할당량에서 계산됩니다.)
  • Docker 컨테이너 사용자에게 시스템 메모리를 더 잘 제어 할 수있는 세 가지 새로운 JVM 옵션.
  • 호스트 프로세스에서 Docker 컨테이너에있는 Java 프로세스로 연결하려고 할 때 연결 메커니즘을 수정하는 버그 수정.
  • 특히 스 니펫이 많은 시작 파일을 사용중인 경우 jShell REPL 도구의 시작 시간이 더 짧습니다.
  • 수정할 수없는 컬렉션을 더 잘 생성 할 수있는 새로운 API. 는 copyOf, Set.copyOfMap.copyOf방법은 기존 인스턴스에서 새 컬렉션 인스턴스를 생성합니다. Stream 패키지 의 클래스에 새 메서드 toUnmodifiableList, toUnmodifiableSettoUnmodifiableMap이 추가되어 CollectorsStream의 요소를 수정할 수없는 컬렉션으로 수집 할 수 있습니다.
  • 지역 변수 유형 추론은 언어를 향상시켜 유형 추론을 지역 변수로 확장합니다. 의도는 정적 유형 안전에 대한 약속을 유지하면서 코딩과 관련된 "의식"을 줄이는 것입니다.
  • 다른 가비지 수집기의 소스 코드 격리를 개선하기위한 깨끗한 가비지 수집기 인터페이스입니다. 이러한 노력의 목표는 HotSpot 가상 머신의 내부 가비지 수집 코드에 대한 더 나은 모듈화와 HotSpot에 새 가비지 수집기를 더 쉽게 추가하는 것입니다.
  • G1 가비지 수집기에 대한 병렬 전체 가비지 수집. 의도는 병렬 처리를 구현하여 최악의 지연 시간을 개선하는 것입니다.
  • 사용자가 지정한 NVDIMM 메모리 모듈과 같은 대체 메모리 장치에 개체 힙을 할당하도록 HotSpot을 활성화합니다. 이 기능은 미래의 시스템이 이기종 메모리 아키텍처를 가질 수 있음을 예상합니다.
  • Linux / x64 플랫폼에서 실험적인 방식으로 사용할 Grall Java 기반 Just-In-Time 컴파일러 활성화.
  • JDK 포리스트의 저장소를 단일 저장소로 통합하여 개발을 간소화합니다. 지금까지 코드베이스는 여러 저장소로 분리되어 소스 코드 관리에 문제가 발생할 수 있습니다.
  • 애플리케이션 클래스-데이터 공유 : 프로세스간에 공통 클래스 메타 데이터를 공유하여 설치 공간을 줄입니다. 시작 시간도 향상됩니다.
  • 글로벌 VM safepoint를 수행하지 않고 스레드에서 콜백을 실행하기위한 스레드-로컬 핸드 셰이크. 모든 스레드 또는 스레드 없음 대신 개별 스레드를 중지 할 수 있습니다.
  • JDK에서 기본 루트 인증 기관 인증서 세트 제공. 목표는 Oracle의 Java SE Root CA 프로그램에서 오픈 소스 루트 인증서를 사용하여 OpenJDK 빌드를 개발자에게 더 매력적으로 만드는 것입니다.

장기 Java 로드맵

다음은 Oracle이 Java SE의 차기 및 이후 버전에 대해 고려 중이라고 말한 내용입니다.

  • Java 코드 작성과 관련된 의식을 줄이기 위해 로컬 변수 유형 추론을 포함하는 더 작고 생산성 지향적 인 언어 기능의 인큐베이터 역할을해온 Amber Project; 열거 형의 유형 변수를 허용하고 열거 형 상수에 대해 더 날카로운 유형 검사를 수행하여 열거 형 구성의 표현력을 향상시키기 위해 향상된 열거 형; 람다 및 메서드 참조의 유용성을 높이기 위해 남은 람다.
  • JVM과 원시 코드를 상호 연결하기위한 Project Panama는 JVM에서 기본 함수 호출과 JVM에서 기본 데이터 액세스를 특징으로합니다.
  • Valhalla는 고급 Java VM 및 값 유형 및 일반 전문화를 포함한 언어 기능 후보를위한 인큐베이터 프로젝트입니다.
  • Project Loom, 동시 애플리케이션 작성의 복잡성을 줄입니다. 이 계획은 대체 사용자 모드 스레드 구현, 구분 된 연속 및 호출 스택 조작과 관련된 기타 구성을 추가 할 것을 요구합니다. 이 제안의 주요 목표는 Java로 작성된 스케줄러에 의해 관리되는 스레드의 대체 구현을 제공하는 것입니다. 일반 Java 스레드의 Java 프로그래밍 모델은 유지되지만 성능은 향상되고 설치 공간은 줄어 듭니다.

새로운 6 개월 릴리스 일정으로 한 릴리스를 놓친 기능은 다음 릴리스가 나올 때 6 개월까지 지연 될 수 있습니다. JDK 10에 대해 발표 된 내용을 넘어서 오라클은 새로운 제안 기능이 실제로 Java로 제공되는시기를 약속하지 않았습니다.