次の記事で、「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}