Java10のパフォーマンスの向上
1. 概要
このクイックチュートリアルでは、最新のJava10リリースに伴うパフォーマンスの向上について説明します。
これらの改善は、JDK 10で実行されているすべてのアプリケーションに適用され、それらを活用するためにコードを変更する必要はありません。
2. G1用のパラレルフルGC
G1ガベージコレクタは、JDK9以降のデフォルトのガベージコレクタです。 ただし、G1の完全なGCは、シングルスレッドのマークスイープコンパクトアルゴリズムを使用していました。
これは、Java 10で並列マークスイープコンパクトアルゴリズムに変更され、フルGC中のストップザワールド時間を効果的に短縮します。
3. アプリケーションクラス-データ共有
JDK 5で導入されたクラスデータ共有を使用すると、クラスのセットを共有アーカイブファイルに前処理して、実行時にメモリマッピングして起動時間を短縮できます。これにより、複数のJVMが共有する場合の動的メモリフットプリントも削減できます。同じアーカイブファイル。
CDSはブートストラップクラスローダーのみを許可し、機能をシステムクラスのみに制限していました。 アプリケーションCDS(AppCDS)は、CDSを拡張して、組み込みのシステムクラスローダー(別名「アプリクラスローダー」)、組み込みのプラットフォームクラスローダー、およびカスタムクラスローダーがアーカイブされたクラスをロードできるようにします。 これにより、アプリケーションクラスの機能を使用できるようになります。
この機能を利用するには、次の手順を使用できます。
1. アーカイブするクラスのリストを取得する
次のコマンドは、HelloWorldアプリケーションによってロードされたクラスをhello.lstにダンプします。
$ java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=hello.lst \
-cp hello.jar HelloWorld
2. AppCDSアーカイブを作成する
次のコマンドは、 hello.lst を入力として使用して、 hello.jsaを作成します。
$ java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst \
-XX:SharedArchiveFile=hello.jsa -cp hello.jar
3. AppCDSアーカイブを使用する
次のコマンドは、hello.jsaを入力としてHelloWorldアプリケーションを起動します。
$ java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa \
-cp hello.jar HelloWorld
AppCDSは、Oracle JDK forJDK8および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. 結論
このクイック記事では、Java10のパフォーマンス改善機能に焦点を当てて調査しました。