先日、アナログ時計表示プログラムをJava SE 9のモジュール化対応をしました。
AnalogClockプログラムをJava SE 9のモジュール化 - torutkの日記
次は、Java SE 9での実行です。
Java SE 9からは正式リリースに32bit版が含まれず、64bit版のみとなっています。直前のEarly Access版では32bit版も存在していたので、32bit対応していないのではなく、Oracleがもう32bit OSをJava SEのサポート対象から外したということのようです。
ここで、64bit版Javaでアナログ時計を動かす問題として、64bit版のJavaVMのデフォルト設定が異常にメモリ・CPU喰いとなっている点にあります。これは、サーバー上に一つのJavaVMプロセスが稼働し、そのプロセス上で多数のスレッドが動作するサーバー用アプリケーションには適した設定です。しかし、JavaVMを多数稼動させるサーバーや、デスクトップ機のようにJavaVMやそれ以外のいくつものアプリケーションが多数動いている環境には不向きな設定です。
Java SE 8の64bit版JavaVMでは、デフォルトのGC(Parallel GC)が論理CPU数を並列実行します。また、メモリもJavaヒープのサイズが初期値で搭載メモリの1/64(16GB搭載PCなら256MB)となります。
この問題と対処については、JJUG CCC 2016 Springで登壇した次のセッションで触れています。
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Java SE 8までは、32bit版のJavaVMのデフォルト設定がメモリとCPUを控え目に使うようになっているので、32bit JavaVMでアプリケーションを動かすことで面倒なパラメーター設定をせずにすみました。
しかし、Java SE 9からは、64bit版JavaVMしか(Oracleから)提供されていないため、JavaVMオプションをいくつも指定してメモリとCPUを控えめにすることが必要となります。
また、32bit版の提供がないこととは別に、JavaVMからHotSpot Clientが無くなるという方針が出ていました。
Java SE 9ではHotSpot Client VMが無くなるとのこと - torutkの日記
そこで、64bit版JavaVMでメモリとCPUを控えめにする設定を次に記載しました。
http://www.torutk.com/projects/swe/wiki/JDK_9_JavaVM%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3
アナログ時計のプログラムの作成では、Windows OS用インストーラを作成するjavapackagerのオプション引数でこのJavaVMの設定を行っています。
javapackager -deploy -native msi ^ -v ^ -outdir dist -outfile AnalogClockGadget ^ -p dist -m AnalogClockGadget/com.torutk.gadget.analogclock.AnalogClockApp ^ -name "AnalogClock" ^ -BappVersion=0.4.2 ^ -title "Analog Clock Gadget" ^ -vendor Takahashi ^ -description "Analog Clock on desktop" ^ -BjvmOptions=-Xms32m ^ -BjvmOptions=-Xmx128m ^ -BjvmOptions=-Xss256k ^ -BjvmOptions=-XX:TieredStopAtLevel=1 ^ -BjvmOptions=-XX:CICompilerCount=2 ^ -BjvmOptions=-XX:CompileThreshold=1500 ^ -BjvmOptions=-XX:InitialCodeCacheSize=160k ^ -BjvmOptions=-XX:ReservedCodeCacheSize=32m ^ -BjvmOptions=-XX:+UseSerialGC
Java SE 9のモジュール化によって、自己完結型アプリケーション(アプリケーションプログラムと、アプリケーションプログラムを動かすのに必要となるJavaランタイム)をインストールしたサイズは、Java SE 8と比べると次のように小さくなりました。
項目 | Java SE 8 | Java SE 9 |
---|---|---|
容量 | 168MB | 90MB |
ファイル数 | 159 | 131 |
- Windows 10で確認