Java9の機能と改善点



このブログのProjectJigsawと主要なJava9機能の下で開発されたモジュラーフレームワークは、JShell(REPLツール)、重要なAPIの変更、およびJVMレベルの変更です。

Java9およびJava9機能のリリースは、Javaエコシステムのマイルストーンです。新しいリリースに遅れずについていくことは、テクノロジーを最新の状態に保つために重要であり、導入されるものの背後にある必要性を理解することで、あなたはあなたに近づくことができます ProjectJigsawで開発されたモジュラーフレームワークはこのJavaSEリリースの一部であり、このリリースの主な機能はJShell(REPLツール)、重要なAPIの変更、JVMのパフォーマンスとデバッグ可能性を向上させるJVMレベルの変更です。

ブロックチェーン開発者とは

Java 9の機能を詳細に解明する前に、以前のJavaバージョンを覗いてみて、欠点は何か、Java9がこれらの異常を克服するのにどのように役立ったかを見てみましょう。





  • Java Standard EditionプラットフォームとJDKは、小さなコンピューティングデバイスではナビゲートできませんでした
  • JDKの全体的なセキュリティとメンテナンスはありませんでした
  • アプリケーションのパフォーマンスに全体的な改善はありませんでした
  • Java開発者がJavaSEプラットフォームとEEプラットフォームの両方で、コードライブラリとより大きなアプリケーションを構築して維持することは困難でした。

このブログ投稿では、Java9の機能を次のように分類します。



  1. Java9でAPIアップデートを処理する
  2. Java9のHTTP / 2クライアント
  3. Java 9でのJavaシェルスクリプト(Read-Eval-Print-Loop)
  4. Java9のマルチリリースJARファイル機能
  5. Java9のその他の同時実行更新機能
  6. Java9でのプロジェクトジグソーパズル

Java 9の新機能は何ですか?

知っておく価値があると思うJava9の新機能をいくつか選びました。これらの機能を見てみましょう:-

Java9でAPIアップデートを処理する

JavaのProcessAPIは非常に原始的であり、新しいプロセスを起動するためだけのサポート付き、プロセスの出力とエラーストリームをリダイレクトします。このリリースでは、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)}

Java9のHTTP / 2クライアント

このJava9機能は、今後のリリースで変更される予定であり、完全に削除される可能性もあります。

ついさっき 開発者は、Apache HTTP、Jerseyなどのサードパーティライブラリを使用することがよくあります。これに加えて、JavaのHTTPAPIはHTTP / 1.1仕様よりも前のものであり、同期的であり、保守が困難です。これらの制限により、新しいAPIを追加する必要がありました。新しいHTTPクライアントAPIは、次のものを提供します。

  • ほとんどのHTTPリクエストを処理するためのシンプルで簡潔なAPI
  • HTTP / 2仕様のサポート
  • よりよい性能
  • より良いセキュリティ
  • さらにいくつかの機能強化

新しいAPIを使用してHTTPGETリクエストを作成するためのサンプルコードを見てみましょう。以下は、ファイルmodule-info.javaで定義されているモジュール定義です。

モジュールの新機能{にはjdk.incubator.httpclientが必要です}

次のコードは、jdk.incubator.httpclientモジュールの一部であるHTTPクライアントAPIを使用しています。

importjdk.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( new 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シェルスクリプト(Read-Eval-Print-Loop)

Ruby、Scala、Groovy、Clojureなどの言語がツールとともに出荷されているのを見たことがあるはずです。 REPL (( Read-Eval-Print-Loop )。このREPLツールは、言語機能を試すのに非常に役立ちます。たとえば、Scalaでは、単純なHelloWorldプログラムを次のように記述できます。 scala> println( 'Hello World')

の利点のいくつか JShell REPL 以下の通り:

  • 経験豊富な開発者は、メインのコードベースに採用する前に、プロトタイプをすばやく作成して実験することができます。
  • Java開発者はREPLを自慢できるようになりました

次の画像に示すように、JShellコマンドを実行してみましょう。

JShell HelloWorldの例-Java9-Edureka

Java9のマルチリリースJARファイル機能

現在のところ、JARファイルには、コンパイル対象のJavaバージョンでのみ実行できるクラスを含めることができます。新しいバージョンでJavaプラットフォームの新機能を活用するには、ライブラリ開発者はライブラリの新しいバージョンをリリースする必要があります。間もなく、開発者によって維持されているライブラリの複数のバージョンがあり、これは悪夢になる可能性があります。この制限を克服するために、マルチリリースJARファイルのこれらのJava 9機能により、開発者は、さまざまなJavaバージョンのさまざまなバージョンのクラスファイルを使用してJARファイルを作成できます。次の例はそれをより明確にします。

現在のJARファイルの図を次に示します。

瓶の根 -A.class -B.class -C.class

マルチリリースJARファイルの外観は次のとおりです。

瓶の根 -A.class -B.class -C.class -META-INF -バージョン -9 -A.class -10 -B.class

前の図では、JARファイルは2つのJavaバージョン–9および10のクラスファイルをサポートしています。

したがって、以前のJARがJava 9で実行されると、バージョン–9フォルダーのA.classが実行用に取得されます。

マルチリリースJARファイルをサポートしていないプラットフォームでは、versionsディレクトリの下のクラスは使用されません。したがって、Java 8でマルチリリースJARファイルを実行する場合は、単純なJARファイルを実行するのと同じくらい優れています。

Java9のその他の同時実行更新機能

このアップデートでは、新しいクラス、 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(パブリッシャーとサブスクライバーの両方として機能します)。

Java9でのプロジェクトジグソーパズル

このプロジェクトの主な目的は、 モジュール性 サポート Java 9でモジュールを作成し、同じものを JDK あれは、 JDKをモジュール化する

いくつかの 利点モジュール性 以下の通り:

  • 強力なカプセル化 :モジュールは、使用可能になっているモジュールの部分にのみアクセスできます。したがって、パッケージがモジュール情報ファイルに明示的にエクスポートされない限り、パッケージ内のパブリッククラスはパブリックではありません。
  • 明確な依存関係 :モジュールは、requires句を介して使用する他のモジュールを宣言する必要があります。
  • モジュールを組み合わせて、より小さなランタイムを作成します。これは、より小さなコンピューティングデバイスに簡単に拡張できます。
  • 信頼性のある :アプリケーションは、 ランタイム エラー 例:- クラスが欠落しているために実行時にアプリケーションが失敗し、その結果、 ClassNotFoundException

いろいろあります JEP 、このプロジェクトの一部である次のとおりです。

  • JEP200-モジュラーJDK :これは、Javaプラットフォームモジュールシステムを適用して、JDKをモジュール化して、コンパイル時、ビルド時、または実行時に組み合わせることができるモジュールのセットにします。
  • JEP 201 –モジュラーソースコード :これにより、JDKソースコードがモジュールにモジュール化され、モジュールをコンパイルするためのビルドツールが強化されます。
  • JEP220-モジュラーランタイムイメージ :これにより、JDKおよびJREランタイムイメージが再構築され、モジュールに対応し、パフォーマンス、セキュリティ、および保守性が向上します。
  • JEP 260 –ほとんどの内部APIをカプセル化します :これにより、多くの内部APIに直接またはリフレクションを介してアクセスできます。変更が必要な内部APIにアクセスするのは非常に危険です。その使用を防ぐために、それらはモジュールにカプセル化されており、適切なAPIが配置されるまで、広く使用されている内部APIのみが使用可能になります。
  • JEP261-モジュールシステム :これは、Javaプログラミング言語、JVM、およびその他の標準APIを変更することにより、モジュールシステムのJava仕様を実装します。
  • JEP 282:jlink、Javaリンカー :これにより、モジュールとその依存関係をより短い実行時間にパッケージ化できます。

つまり、これはすべてJava9とJava9の新機能に関するものでした。

Java 9の機能を理解したので、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。

G 私たちに質問がありますか?この「Java9」ブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。