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のパフォーマンス改善機能に焦点を当てて調査しました。