Java 9 기능 및 개선 사항



이 블로그의 Project Jigsaw 및 주요 Java 9 기능에서 개발 된 모듈 식 프레임 워크는 JShell (REPL 도구), 중요한 API 변경 및 JVM 수준 변경입니다.

Java 9 및 Java 9 기능의 릴리스는 Java 에코 시스템의 이정표입니다.새로운 릴리스를 유지하는 것은 기술에 대한 최신 정보를 유지하고 도입되는 기능의 필요성을 이해하는 데 중요합니다. .Project Jigsaw에서 개발 된 모듈 식 프레임 워크는이 Java SE 릴리스의 일부가 될 것이며 여기에 포함 된 주요 기능은 JShell (REPL 도구), 중요한 API 변경 및 JVM의 성능 및 디버깅 가능성을 개선하기위한 JVM 수준 변경입니다.

Java 9 기능을 자세히 설명하기 전에 이전 Java 버전을 살펴보고 단점이 무엇인지, Java 9가 이러한 예외를 극복하는 데 어떻게 도움이되었는지 살펴 보겠습니다.





  • Java Standard Edition 플랫폼 및 JDK는 소형 컴퓨팅 장치에서 탐색 할 수 없었습니다.
  • JDK의 전반적인 보안 및 유지 관리가 없었습니다.
  • 애플리케이션 성능이 전반적으로 향상되지 않았습니다.
  • Java 개발자가 Java SE 및 EE 플랫폼 모두에 대해 코드 라이브러리와 더 큰 애플리케이션을 구축하고 유지하는 것은 어려웠습니다.

이 블로그 게시물에서는 다음과 같은 방식으로 Java 9 기능을 분류합니다.



  1. Java 9의 프로세스 API 업데이트
  2. Java 9의 HTTP / 2 클라이언트
  3. Java 9의 Java Shell 스크립팅 (Read-Eval-Print-Loop)
  4. Java 9의 다중 릴리스 JAR 파일 기능
  5. Java 9의 추가 동시성 업데이트 기능
  6. Java 9의 프로젝트 퍼즐

Java 9의 새로운 기능은 무엇입니까?

몇 가지 새로운 Java 9 기능을 선택했습니다.이 기능에 대해 알아볼 가치가 있습니다. 이러한 기능이 무엇인지 살펴 보겠습니다.

Java 9의 프로세스 API 업데이트

Java의 Process API는 매우 원시적이었습니다.새로운 프로세스를 시작하는 것만 지원, 프로세스의 출력 및 오류 스트림을 리디렉션합니다. 이 릴리스에서 Process API에 대한 업데이트는 다음을 가능하게합니다.

  • 현재 JVM 프로세스 및 JVM이 생성 한 기타 프로세스의 PID 가져 오기
  • 시스템에서 실행중인 프로세스를 열거하여 PID, 이름 및 리소스 사용량과 같은 정보를 가져옵니다.
  • 프로세스 트리 관리
  • 하위 프로세스 관리

현재 PID와 현재 프로세스 정보를 인쇄하는 샘플 코드를 살펴 보겠습니다.



public class NewFeatures {public static void main (String [] args) {ProcessHandle currentProcess = ProcessHandle.current () System.out.println ( 'PID :'+ currentProcess.getPid ()) ProcessHandle.Info currentProcessInfo = currentProcess.info () System.out.println ( 'Info :'+ currentProcessInfo)}

Java 9의 HTTP / 2 클라이언트

이 Java 9 기능은 후속 릴리스에서 변경 될 것으로 예상되며 완전히 제거 될 수도 있습니다.

일찍이 개발자는 종종 Apache HTTP, Jersey 등과 같은 타사 라이브러리를 사용합니다. 이 외에도 Java의 HTTP API는 HTTP / 1.1 사양보다 앞서 있으며 동기식이며 유지 관리가 어렵습니다. 이러한 제한으로 인해 새 API를 추가해야했습니다. 새로운 HTTP 클라이언트 API는 다음을 제공합니다.

  • 대부분의 HTTP 요청을 처리하는 간단하고 간결한 API
  • HTTP / 2 사양 지원
  • 더 나은 성능
  • 더 나은 보안
  • 몇 가지 추가 개선 사항

새 API를 사용하여 HTTP GET 요청을 만드는 샘플 코드를 살펴 보겠습니다. 다음은 module-info.java 파일에 정의 된 모듈 정의입니다.

모듈 newfeatures {에는 jdk.incubator.httpclient 필요}

다음 코드는 jdk.incubator.httpclient 모듈의 일부인 HTTP 클라이언트 API를 사용합니다.

import jdk.incubator.http. * import java.net.URI public class Http2Feature {public static void main (String [] args) throws Exception {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( 새 URI (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String response = client.send (request, HttpResponse.BodyHandler.asString ()) System.out.println ( '상태 코드 :'+ response.statusCode ())
System.out.println ( 'Response Body :'+ response.body ())}}}

Java 9의 Java Shell 스크립팅 (Read-Eval-Print-Loop)

Ruby, Scala, Groovy, Clojure와 같은 언어와 같은 언어가 도구와 함께 제공되는 것을 보셨을 것입니다. REPL ( 읽기 평가 인쇄 루프 ). 이 REPL 도구는 언어 기능을 시험하는 데 매우 유용합니다. 예를 들어 Scala에서는 간단한 Hello World 프로그램을 다음과 같이 작성할 수 있습니다. scala> println ( 'Hello World')

몇 가지 장점은 JShell REPL 다음과 같다:

자바에서 jframe은 무엇입니까
  • 숙련 된 개발자는 기본 코드베이스에 채택하기 전에 신속하게 프로토 타입을 만들고 실험 할 수 있습니다.
  • Java 개발자는 이제 REPL을 자랑 할 수 있습니다.

다음 이미지와 같이 JShell 명령을 실행 해 보겠습니다.

JShell Hello World 예제-Java 9-Edureka

Java 9의 다중 릴리스 JAR 파일 기능

현재 JAR 파일은 컴파일 된 Java 버전에서만 실행할 수있는 클래스를 포함 할 수 있습니다. 최신 버전에서 Java 플랫폼의 새로운 기능을 활용하려면 라이브러리 개발자가 최신 버전의 라이브러리를 릴리스해야합니다. 조만간 개발자가 여러 버전의 라이브러리를 유지 관리하게되며 이는 악몽이 될 수 있습니다. 이러한 제한을 극복하기 위해 다중 릴리스 JAR 파일의 이러한 Java 9 기능을 통해 개발자는 서로 다른 Java 버전에 대해 서로 다른 버전의 클래스 파일로 JAR 파일을 빌드 할 수 있습니다.다음 예제는 더 명확합니다.

다음은 현재 JAR 파일의 그림입니다.

항아리 뿌리 -A. 클래스 -B. 클래스 -C. 클래스

다음은 다중 릴리스 JAR 파일의 모양입니다.

항아리 뿌리 -A. 클래스 -B. 클래스 -C. 클래스 -META-INF -버전 -9 -A. 클래스 -10 -B. 클래스

앞의 그림에서 JAR 파일은 두 개의 Java 버전 (9 및 10)에 대한 클래스 파일을 지원합니다.

따라서 이전 JAR이 Java 9에서 실행될 때 버전-9 폴더 아래의 A.class가 실행을 위해 선택됩니다.

멀티 릴리스 JAR 파일을 지원하지 않는 플랫폼에서는 versions 디렉토리의 클래스가 사용되지 않습니다. 따라서 Java 8에서 멀티 릴리스 JAR 파일을 실행하는 경우 간단한 JAR 파일을 실행하는 것만 큼 좋습니다.

Java 9의 추가 동시성 업데이트 기능

이번 업데이트에서는 새로운 클래스, java.util.concurrent.Flow 발행-구독 프레임 워크의 구현을 지원하는 중첩 인터페이스가있는 도입되었습니다. 게시-구독 프레임 워크를 사용하면 개발자가 데이터를 생성하는 게시자와이를 관리하는 구독을 통해 데이터를 소비하는 구독자를 설정하여 데이터의 라이브 스트림을 비동기 적으로 소비 할 수있는 구성 요소를 구축 할 수 있습니다. 4 개의 새로운 인터페이스는 다음과 같습니다.

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (게시자 및 구독자로 작동).

Java 9의 프로젝트 퍼즐

이 프로젝트의 주요 목적은 모듈성 지원하다 Java 9에서 모듈을 만든 다음 동일한 내용을 JDK 그건, JDK 모듈화 .

일부 혜택모듈성 다음과 같다:

  • 강력한 캡슐화 : 모듈은 사용 가능한 모듈 부분에만 액세스 할 수 있습니다. 따라서 패키지가 모듈 정보 파일에 명시 적으로 내보내지지 않는 한 패키지의 공용 클래스는 공용이 아닙니다.
  • 종속성 지우기 : 모듈은 requires 절을 통해 사용할 다른 모듈을 선언해야합니다.
  • 모듈을 결합하여 더 작은 런타임을 생성하여 더 작은 컴퓨팅 장치로 쉽게 확장 할 수 있습니다.
  • 신뢰성 : 응용 프로그램은 실행 시간 오류 . 예:- 누락 된 클래스로 인해 런타임 중에 애플리케이션이 실패한 경험이 있어야합니다. ClassNotFoundException .

다양한 JEP 이 프로젝트의 일부인 다음과 같습니다.

  • JEP 200-모듈 식 JDK : Java 플랫폼 모듈 시스템을 적용하여 JDK를 컴파일 타임, 빌드 타임 또는 런타임에 결합 할 수있는 모듈 세트로 모듈화합니다.
  • JEP 201 – 모듈 형 소스 코드 : 이것은 JDK 소스 코드를 모듈로 모듈화하고 모듈을 컴파일하는 빌드 도구를 향상시킵니다.
  • JEP 220-모듈 식 런타임 이미지 : 이는 모듈을 수용하고 성능, 보안 및 유지 보수성을 향상시키기 위해 JDK 및 JRE 런타임 이미지를 재구성합니다.
  • JEP 260 – 대부분의 내부 API 캡슐화 :이를 통해 많은 내부 API에 직접 또는 리플렉션을 통해 액세스 할 수 있습니다. 변경 될 수있는 내부 API에 액세스하는 것은 매우 위험합니다. 사용을 방지하기 위해 모듈로 캡슐화되고 적절한 API가 제자리에있을 때까지 널리 사용되는 내부 API 만 사용할 수 있습니다.
  • JEP 261-모듈 시스템 : Java 프로그래밍 언어, JVM 및 기타 표준 API를 변경하여 모듈 시스템 Java 사양을 구현합니다.
  • JEP 282 : jlink, Java 링커 :이를 통해 모듈과 해당 종속성을 더 작은 런타임으로 패키징 할 수 있습니다.

그래서 이것은 Java 9와 새로운 Java 9 기능에 관한 것입니다.

이제 Java 9의 기능을 이해 했으므로 전 세계에 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서

질문이 없나요? 이 'Java 9'블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 연락 드리겠습니다.