torutkのブログ

ソフトウェア・エンジニアのブログ

Java SE 9ではHotSpot Client VMが無くなるとのこと

次の記事で、「32ビット版WindowsのClient VMの削除」という記載を見かけました。
https://builder.japan.zdnet.com/sp_oracle/35095997/

64bit版のOSで、64bit版のJavaVM上でJavaのプログラムを多数実行する場合、各Javaプロセスが使用するメモリとCPU使用率が累積してそれなりに気になるレベルとなります。

2コア4HTのCPU(ノートPCで主流のタイプ)上で、Windows 64bit版のJavaプログラムをデフォルト設定で実行すると、JITコンパイルおよびGCのスレッドが合計7つ使われます。また、メモリは初期ヒープで128MB、スタックはスレッドあたり1MB使われます。

これが、32bit版JavaVMのClient VMを使った場合、JITコンパイルおよびGCのスレッドは合計2つ、メモリは初期ヒープで16MB、スタックはスレッドあたり320KB使うだけとなります。

昨年、JJUG CCC Spring 2016でOracle Java RE 8の32bit版/64bit版での違いを紹介しました。このときは、デスクトップで複数のJavaプログラムを実行するならば、32bit版JavaVMを使用するのが楽で効果的と結論付けていました。
https://www.slideshare.net/torutk/jjug-ccc-2016-spring-i-5-java

これが、Java SE 9からは使えなくなってしまいます。

Java SE 9 Early Access版で調べてみた

JDK 9 build 167 のWindows 32bit版をダウンロードし実行してみました。

C:\work>java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+167)
Java HotSpot(TM) Server VM (build 9-ea+167, mixed mode, emulated-client)

すると、emulated-client の文言が見えます。

パラメータを見てみると次のようにCPUやメモリに控え目な設定となっていました。

C:\work>java -XX:+PrintFlagsFinal -version
  :
     intx CICompilerCount      = 1                {product} {ergonomic}
  :
     intx CompileThreshold     = 1500             {pd product} {ergonomic}
  :
    uintx InitialCodeCacheSize = 163840           {pd product} {ergonomic}
    size_t InitialHeapSize     = 16777216         {product} {ergonomic}
  :
    size_t MaxHeapSize         = 268435456        {product} {ergonomic}
  :
    bool TieredCompilation     = false            {pd product} {ergonomic}
  :
    bool UseSerialGC           = true             {product} {ergonomic}