Java 10のパフォーマンス向上
1概要
このクイックチュートリアルでは、最新のJava 10リリースに伴うパフォーマンスの向上について説明します。
これらの改善は、JDK 10で実行されているすべてのアプリケーションに適用され、それらを活用するためにコードを変更する必要はありません。
2 G1
用パラレルフルGC
G1ガベージコレクタは、JDK 9以降のデフォルトのものです。ただし、G1のフルGCでは、シングルスレッドのマークスイープコンパクトアルゴリズムを使用しました。
これは、Java 10では
パラレルマークスイープ – コンパクトアルゴリズム
に変更されており、フルGC中の停止時間を効果的に短縮しています。
3アプリケーションクラス – データ共有
JDK 5で導入されたClass-Data Sharingは、一連のクラスを共有アーカイブファイルに事前処理し、実行時にメモリマップして起動時間を短縮し、複数の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
as入力を使用して
__hello.jsを作成します。
$ java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=hello.lst \
-XX:SharedArchiveFile=hello.jsa -cp hello.jar
-
3 AppCDSアーカイブを使用する**
次のコマンドは、
__ hello.jsa
as入力で
HelloWorld
__アプリケーションを開始します。
$ java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa \
-cp hello.jar HelloWorld
-
AppCDSは、JDK 8およびJDK 9用のOracle JDKの商用機能でした。
4実験的なJavaベースのJITコンパイラ
Graal
は、HotSpot JVMと統合されたJavaで書かれた動的コンパイラです。高性能と拡張性に重点が置かれています。これは、JDK 9で導入された実験的なAOT(Ahead-of-Time)コンパイラの基礎でもあります。
JDK 10はGraalコンパイラをLinux/x64プラットフォームで実験的なJITコンパイラとして使用することを可能にします。
GraalをJITコンパイラとして有効にするには、javaコマンドラインで次のオプションを使用します。
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
これは実験的な機能であり、既存のJITコンパイラよりもパフォーマンスが向上するとは限りません。