この記事は近々リリースされるJava 9の新機能に合わせて同期的に更新されます(最終更新日:2014年9月9日)
OpenJDKの開発スピードの高速化:3月のJava 8リリースに続き2014 年、今後 2 年間のリリース サイクルに入り、Java 9 は 2016 年にリリースされる予定であり、同時にいくつかの新機能が JEP (JDK Improvement Proposal) にまとめられました。 JSR (Java 仕様要求) に加えて、新しいバージョンに含まれるその他の機能についてもいくつかの希望を示しました。
これらの重要な機能は、Jigsaw プロジェクトに含まれています。大幅なパフォーマンスの向上と待望の API には、プロセス API の更新、JSON が java.util の一部となる、通貨処理 API が含まれます。最先端のテクノロジーを利用したい方のために、Java 9 の初期バージョンがここから入手可能です。
この記事は、Java 9 の新機能に基づいて継続的に更新されます。乞うご期待! 1. Jigsaw プロジェクト; モジュール化されたソース コード Jigsaw プロジェクトは、Java コードをモジュール化し、相互に連携できるコンポーネントに分割することです。これも Java 9 の多くの機能の 1 つです。 JEP は、Jigsaw への 4 つのステップの最初のステップであり、JRE と JDK の実際の構造を変更するものではありません。 JEP は、JDK ソース コードをモジュール化するように設計されており、ビルド システムがモジュールをコンパイルし、ビルド時にモジュール境界をチェックできるようにします。このプロジェクトは元々 Java 8 でリリースされましたが、遅延のため Java 9 に追加されます。 完成したら、プロジェクトのニーズに応じてコンポーネントをカスタマイズできるようになり、rt.jar のサイズが削減される可能性があります。 JDK 7 および JDK 8 の rt.jar パッケージには約 20,000 のクラスがありますが、その多くは特定の環境では使用されません (Java 8 のコンパクトな配布機能にはいくつかのソリューションが含まれていますが) 準冗長性があります)。これは、Java を小型コンピューティング デバイス (ネットワーク デバイスなど) に簡単に適用できるようにし、セキュリティとパフォーマンスを向上させ、また開発者がこれらのクラス ライブラリを構築および保守しやすくするために行われます。 その他の JEP 201 コンテンツ 2. プロセス API の簡略化 これまでのところ、システム プロセスを制御および管理する Java の機能は限られています。たとえば、プログラムのプロセス PID を簡単に取得するには、ネイティブ プログラムを呼び出すか、自分で何らかの回避策を使用する必要があります。さらに、正しい結果を確実に得るには、各 (システム) プラットフォームで異なる実装が必要です。 コードは Linux PIDS を取得できることが期待されていますが、現在は次のようになります:public static void main(String[] args) throws Exception { Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" }); if (proc.waitFor() == 0) { InputStream in = proc.getInputStream(); int available = in.available(); byte[] outputBytes = new byte[available]; in.read(outputBytes); String pid = new String(outputBytes); System.out.println("Your pid is " + pid); } }
System.out.println("Your pid is " + Process.getCurrentPid());
//新的类型: Money & FastMoney Money amt1 = Money.of(10.1234556123456789, "USD"); // Money is a BigDecimal FastMoney amt2 = FastMoney.of(123456789, "USD"); // FastMoney is up to 5 decimal places Money total = amt1.add(amt2);
// 钱表达成各国货币的方法: MonetaryAmountFormat germanFormat = MonetaryFormats.getAmountFormat( Locale.GERMANY); System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD
このようなストレステストを通じて、JVM の最終的なスループット (1 秒あたりのメッセージ数) を推定することができます。JEP は、新しいメカニズムを Java 9 に適用できれば、アプリケーションのパフォーマンスは次のようになります。大幅に改善されました。
6. コード分割キャッシュ
Java 9 のもう 1 つのパフォーマンス向上は、JIT (Just-in-time) コンパイラーによるもので、特定のコードが大量に繰り返し実行されると、仮想マシンがこのコードをコンパイルします。をマシンコード (ネイティブコード) に変換してコードキャッシュに保存し、キャッシュ内のコードのさまざまなセグメントにアクセスすることでコンパイラーの効率を向上させます
元の単一のキャッシュ領域とは異なり、新しいコードキャッシュはいくつかに分割されます。コード自体のライフサイクルに応じて 3 つのタイプ:
- 永続的なコード (JVM 組み込み/非メソッド コード)
- 短期的なコード (特定の条件下でのみ適用されるプロファイル コード) )
-長期コード (非構成コード)
キャッシュのセグメント化により、あらゆる面でプログラムのパフォーマンスが向上します。たとえば、ガベージ コレクションのスキャンを実行するときに、非メソッド コード (永続的なコード) を直接スキップできるため、効率が向上します。 .
7. インテリジェント Java コンパイル、第 2 フェーズ
インテリジェント Java コンパイル ツール sjavac の第 1 フェーズは、マルチコア プロセッサ上の JDK のコンパイル速度を向上させるために使用される JEP 139 プロジェクトで始まりました。第 2 フェーズ (JEP 199) に入りました。その目的は、sjavac を改善し、それを現在の JDK コンパイル ツール javac に代わる Java のデフォルトのユニバーサル コンパイル ツールにすることです。
その他の期待に値するコンテンツ:
8. HTTP 2.0 クライアント
HTTP 2.0 標準はまだ正式にリリースされていませんが、最終レビュー段階に入っており、Java 9 のリリース前に完成する予定です。JEP 110 は、新しい Java HTTP クライアントを再定義して実装する予定です。現在の HttpURLConnection を実装し、HTTP 2.0 とネットワーク インターフェイス (オリジナルの Web ソケット) も実装しています。まだ JEP によって正式に認識されていませんが、このプロジェクトの内容を Java 9 に含めたいと考えています。
公式 HTTP 2.0 RFC (Request for Comments、公式)技術ディスカッション/会議議事録などの一連の文書記録は、2015 年 2 月にリリースされる予定でした。これは、Google によってリリースされた SPDY (Speedy、fast) プロトコルに基づいています。HTTP 1.1 ベースのネットワークと比較されます。プロトコルに基づくネットワークでは、時間の経過とともに 11.81% から 47.7% の大幅な速度向上が見られ、現在ではこのプロトコルを実装したブラウザーが存在しています。
これは。 Kulla という名前のプロジェクトは最近、2015 年 4 月に統合されテストされると発表しましたが、現在は利用できません。Java 9 のリリースに追いつくことができると期待されていますが、進捗が早い場合は、追いつくだけかもしれません。現在、Java には公式の REPL (Read-Eval-Print-Loop) メソッドがありません。つまり、数行の Java コードで簡単なテストを実行する場合、これらの行をカプセル化する必要があります。一部の一般的な IDE には Java REPL ツールがありますが、正式なサポートはなく、Kulla プロジェクトは Java によって正式にリリースされた REPL ソリューションになる可能性があります
Kulla プロジェクトの詳細。
これらの新機能はどこから来たのでしょうか?
JEP と JSR は何もないところから作られたものではありません。 ここでは、Java 開発の生態環境を紹介します:
グループ - 右 セキュリティ、ネットワーキング、 Swing、HotSpot、共通の関心を持つ組織および個人
プロジェクト - 最近の Lambda プロジェクト、ジグソー プロジェクト、スマトラ計画など、少なくとも 1 つのグループによってスポンサーおよびサポートされている、コードの作成、ドキュメント、その他の作業。
JDK 改善提案 (JEP) - 新しい試みが必要なときはいつでも、JEP は JCP (Java Community Process) の前または同時に非公式の仕様を提案できます。承認された JEP は正式に JDK 開発ロードマップに書き込まれ、バージョン番号が割り当てられます。
Java 仕様提案 (JSR) - 新しい機能の仕様は、グループ/プロジェクト、JEP、JCP メンバー、または Java コミュニティ メンバーによる提案から作成されます。各 Java バージョンは、対応する JSR によってサポートされます。まだ利用できません。