Java 10のパフォーマンス向上

Java 10のパフォーマンスの改善

1. 概要

このクイックチュートリアルでは、最新のJava 10リリースに伴うパフォーマンスの改善について説明します。

これらの改善は、JDK 10で実行されるすべてのアプリケーションに適用され、それらを活用するためのコード変更は不要です。

2. G1用のパラレルフルGC

G1ガベージコレクターは、JDK 9以降のデフォルトです。 ただし、G1のフルGCは、シングルスレッドマークスイープコンパクトアルゴリズムを使用しました。

これは、Java 10ではchanged to the parallel mark-sweep-compact algorithm であり、完全なGC中の停止時間を効果的に短縮します。

3. アプリケーションクラス-データ共有

JDK 5で導入されたクラスデータ共有により、クラスのセットを共有アーカイブファイルに事前処理して、実行時にメモリをマッピングして起動時間を短縮し、複数のJVMが共有する場合の動的メモリフットプリントも削減できます同じアーカイブファイル。

CDSは、ブートストラップクラスローダーのみを許可し、機能をシステムクラスのみに制限しました。 アプリケーションCDS(AppCDS)はCDSを拡張して、組み込みシステムクラスローダー(別名「アプリクラスローダー」)、組み込みプラットフォームクラスローダー、およびアーカイブクラスをロードするカスタムクラスローダーを可能にします。 This makes it possible to use the feature for application classes.

次の手順を使用して、この機能を使用できます。

1. アーカイブするクラスのリストを取得する

次のコマンドは、HelloWorld applicationによってロードされたクラスをhello.lstにダンプします。

$ java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=hello.lst \
    -cp hello.jar HelloWorld

2. AppCDSアーカイブを作成する

次のコマンドは、hello.lst as入力を使用してhello.js a を作成します。

$ java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst \
    -XX:SharedArchiveFile=hello.jsa -cp hello.jar

3. AppCDSアーカイブを使用する

次のコマンドは、hello.jsa as入力でHelloWorld applicationを開始します。

$ java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa \
    -cp hello.jar HelloWorld

AppCDSは、Oracle JDK for JDK8およびJDK9の商用機能でした。 現在はオープンソースであり、一般に公開されています。

4. 実験的なJavaベースのJITコンパイラ

Graalは、HotSpotJVMと統合するJavaで記述された動的コンパイラです。高性能と拡張性に重点を置いています。 これは、JDK 9で導入された実験的なAhead-of-Time(AOT)コンパイラの基礎でもあります。

JDK 10では、GraalコンパイラをLinux / x64プラットフォームで実験的なJITコンパイラとして使用できます。

GraalをJITコンパイラとして有効にするには、javaコマンドラインで次のオプションを使用します。

-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler

これは実験的な機能であり、既存のJITコンパイラよりも必ずしも優れたパフォーマンスが得られるとは限らないことに注意してください。

5. 結論

この簡単な記事では、Java 10のパフォーマンス改善機能に焦点を合わせて検討しました。