Minecraft Java8でShenandoah GCを使う

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を持っている人が検証して欲しい。