Shenandoah GC(シェナンドー)とは
https://wiki.openjdk.org/display/shenandoah/Main
・プログラムの動作と、プログラムの動作中に溜まった不要な物を取り除くガーベッジコレクション(GC)を並行して実行することで遅延を減らす。また、Wiki曰く、2GB割り当てでも200GB割り当てでも同じように動作するらしい。
・欠点:プログラムとGCの並列処理でメモリ使用率とCPU使用率が少し上がる。
導入
・本来java8にShenandoahは含まれないが、RedHat製のOpenJDK(Windowsのみ)には移植されている。公式では最新版やJREがあるが、ダウンロードにログインが必要なので、Adoptiumのマーケットプレースから少し古いJDKをダウンロード。
https://adoptium.net/marketplace?version=8
・ダウンロードしたZipは解凍して、解凍したフォルダは適当な場所に置いておく。念のためファイルパスに2バイト文字(日本語)が入らないようにする。
・ランチャーの構成の設定(JVMの引数、Javaの引数)で、
-XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC
をコピー&ペーストする。公式ランチャーではメモリ割り当ての -Xmx を消さないよう注意する。-XX:+UnlockExperimentalVMOptionsが必須。
・Shenandoahに限らず、-Xms8G -Xmx8Gのように、最小メモリを最大メモリと同じ値にする(起動時にメモリを割り当て分全部確保する)と良い。
検証
管理人のPCはRAM16GBなので重い環境での大量割り当てによるShenandoahの恩恵は受けられない。これについては高性能なPCを持っている人が検証して欲しい。