したがって、Java は 12 位になりました。また、これは LTS リリースではありません (つまり、長期サポートではなく、長期間サポートされるリリースでもありません)。バージョン
11は、8 つの機能を備えた最初の LTS リリースとみなされます。年間サポート期間)、興味深いものがアップデートされました。その中で最も重要なものを見てみましょう。Java では、変更提案は jeps と省略されることを思い出してください (JDK Enhancement Proposal より)。
最も興味深い Jep の JDK 12
189: Shenandoah: 低停止時間ガベージ コレクター (実験的) ガベージ コレクターである Shenandoah は、実行中の Java スレッドと同時にクリーンアップすることで実行時間を短縮する新しいアルゴリズムを使用します。この場合、Shenandoah の一時停止時間はヒープのサイズに関係なく同じになります。開発者はこの機能が新しいリリースで最も重要な機能の 1 つであると考えているにもかかわらず、何らかの理由で Oracle は「公式」リリース ビルドに Sheandoah を含めませんでした。
したがって、高度なガベージ コレクターを試してみる場合は、 Azulなどのサードパーティ ビルドを使用する必要があります。
230: Microbenchmark Suite Microbenchmark は、いくつかの小さな要素のパフォーマンスを測定するマイクロベンチマークです。Java では、JMH フレームワークを使用して記述され、実行されます。バージョン 12 以降、JMH が JDK に追加され、JMHで記述された
テストがすでに存在するため、開発者にとって作業が容易になります。
325: Switch 式 (プレビュー) switch ステートメントを使用して式を記述する新しい形式。特集ページには、従来のスイッチを使用したサンプル コードが示されていますが、break を常に使用すると不必要に冗長になり、ランダム エラーが頻繁に発生します。
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
}
アップデートの作成者は、新しい形式のスイッチ ラベル「case L ->」を導入して、このラベルが適切な場合にラベルの右側のコードのみが実行されることを明確に示すことを提案しています。したがって、上記のコードは、新しい構文を使用すると大幅に短縮できます。
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
334: JVM 定数 API 定数プールには、いわゆるロード可能な定数が含まれています。これらは、たとえば String 型または任意のプリミティブ型の値、およびクラスやメソッドなどの実行時アーティファクトです。クラス ファイルを操作する場合、プログラマはロード可能な定数を操作するための便利なツールの恩恵を受けるでしょう。この JEP の作成者は、それぞれが特定のタイプの定数を記述する新しい値ベースのタイプのシンボリック リンクを導入することで、この問題の解決を開始しました。
イノベーションコード。
340: 2 つではなく 1 つの AArch64 ポート この複雑な名前には、Oracle の 64 ビット ARM ポートと Red Hat の aarch64 が同時にキットに登場したときに Java 9 で発生した問題の解決策が隠されています。さらに、JDK 11 のリリース時点では、Oracle 自体でさえ、Oracle ポートの 64 ビット バージョンをサポートしていませんでした。そのため、64 ビットの Oracle ポートは削除され、32 ビットの ARM32 と、より生産性の高い 64 ビットの aarch64 が残されました。
341:デフォルトの CDS アーカイブ アプリケーション の起動が本当に高速化されるため、非常に素晴らしいアップデートです。Java アプリケーションが開始されると、膨大な数のクラスのロードが開始され、これにはかなり長いプロセスがかかることは周知の事実です。CDS は Class Data Sharing の略で、この機能を使用すると、同じクラスのデフォルト リストを使用して、起動時に起動されるこれらすべてのクラスを特別なクラス データ共有アーカイブにパックできます。その結果、アプリケーションの起動速度が大幅に向上します。
344: G1 の中止可能な混合コレクション G1 は、JDK 9 で Parallel GC に代わってメインのガベージ コレクターとなったガベージ コレクターです。Java 10 では、G1 は複数のスレッドでガベージを収集することを学習しました。しかし、誰もが彼の仕事に満足していたわけではなく、主な問題の 1 つは長い休止でした。今ではキャンセルできるようになりました。G1 は、プログラムの動作の分析に基づいて作業量を決定し、停止することなくすべてを収集するまで「ライブ」オブジェクトをコレクション セットに収集します。G1 は作業量の計算を怠り、長時間作業しすぎることがよくありました。jep-344 が実装されると、G1 は増分ガベージ コレクションに切り替えることができ、次のステップの完了に妥当な時間よりも時間がかかる場合は、そのステップを中止できます。
346:未使用のコミット済みメモリを G1 から直ちに返却する そして、前述の G1 アセンブラーの陣営にさらにいくつかのアップデートがあります。時々、Java ヒープ メモリが大量にあるのに、誰もそれを使用しないということが起こりました。このメモリは。Java 12 では、非アクティブなメモリをオペレーティング システムに「返す」ことができるようになりました。以前は、G1 がメモリを放棄することは非常にまれでしたが、現在はすべてが簡素化されました。新しい機能では、最後のビルドからの間隔が期限切れになり、同時サイクルが存在しない場合、アプリケーションは非アクティブであると定義されます。もう 1 つの状況は、しばらく監視されていた getloadavg() 関数が、設定された許容しきい値を下回る負荷を示した場合です。2 つのイベントのいずれかが発生すると、部分的なガベージ コレクションが開始されます。
Java 12 にないもの: Raw String Literals 多くの開発者がこの機能に興味を持っていましたが、このリリースには登場しませんでした。その作者は、まだ作業が必要であると判断しました。したがって、私たちは文字列リテラルを便利に扱うための関数が Java の次のバージョンのいずれかに登場することをあえて期待しています。生の文字列リテラルのサポートにより、言語に関係なく文字列情報を操作できるようになります。これにより、シールドが不要になります。バックスラッシュが広く使用されている正規表現や、バックスラッシュが区切り文字として使用されている Windows パスで特に役立ちます。つまり、次のような構造を避けるためです:
C:\\My\\Test\\Pack\\
すべてのプログラマーは、仕事の中で何らかの困難に遭遇することがよくあります。開発者の経験不足が原因の場合もありますが、ツール自体の不完全さが原因の場合もあります。Java は優れた言語ですが、完璧には程遠いです。おそらく、すでに Java で何かに遭遇し、自分の「ツール」(言語) で何を変更したいかを知っているでしょうか? コメントでシェアしてください! |
結論
Java 12 には革命はありませんでした。しかし、誰もそれを計画しませんでした。ただし、多くのイノベーションはアプリケーションの動作を最適化し、作業を高速化することを目的としており、これは良いニュースです。ちなみに、IDEA はすでに JDK 12 をサポートしているため、その機能を試すことができます。もちろん、初心者に直接影響する更新はほとんどありませんが、JavaRush を学習し始めたばかりの人でも (--enable-preview フラグを設定した後) 新しいスイッチで遊ぶことができます。
GO TO FULL VERSION