Java メモリと GC
Minecraft のメモリ使用
Minecraft は Java プログラム。すべての Java プログラムと同様、システム RAM の固定枠を割り当てられた Java 仮想マシン (JVM) 内で動きます。ロード済みチャンク、エンティティ、Mod 状態、テクスチャ、すべてその枠内で動作。
GDLauncher のインスタンス設定で Instance Java Memory を調整すると、-Xmx (JVM が使える最大ヒープサイズ) を設定したことになります。Java コード自体 (オブジェクト割り当て、Mod のデータ構造、ワールド状態) はこのヒープに住みます。テクスチャと OpenGL バッファはヒープ外のネイティブメモリにあり、Xmx の影響を受けません。
真のボトルネックは GC
Java は手動でメモリを解放しません。ガベージコレクタ (GC) が定期的にヒープを走査し、参照されていないオブジェクトを見つけて回収します。最近の Minecraft はデフォルトで G1 コレクタを使用。
GC は 2 モード:
- Young GC: 短く、頻繁。最近作成されたオブジェクトの小さな「Young 世代」を走査。通常 1~2 ミリ秒。
- Old GC / Mixed GC: 長く、低頻度。ヒープの残りを走査。大きなヒープでは数十ミリ秒以上かかることも。
GC が走るとき Minecraft は一時停止します。ヒープが大きいほどその大きな回収は長くなります。だから本当に必要な量を超えて RAM を増やすとポーズによるカクつきが 悪化 します、改善ではなく。
これは Java メモリチューニングで最も直感に反する点: 少なめに割り当てる方がスムーズなことがある。
適切な RAM 量
実際の作業ヒープがスラッシュなく収まる目安:
| ワークロード | 推奨 Xmx |
|---|---|
| Vanilla Minecraft | 2~4 GB |
| 軽量 Mod (20~40、Sodium 系) | 4 GB |
| 中規模 Modpack (80~120 Mod) | 4~6 GB |
| 大型 Modpack (ATM、FTB Continents、250+ Mod) | 6~8 GB |
| 「キッチンシンク」型 (500+ Mod、深いチャンク事前生成) | 8~10 GB |
10 GB 超は Modpack のドキュメントが明示しない限り役立ちません。Modpack によっては明示的に要求する場合 (Better End と NetherEx の組み合わせなどメモリ食い Mod) があり、その推奨設定に従ってください。
GDLauncher のスライダー
インスタンスを開き、Settings タブをクリック、Instance Java Memory までスクロール。トグルを入れてインスタンス別のオーバーライドを有効化し、スライダーをドラッグ。範囲は 1 GB からシステム合計 RAM まで (80% を超えると警告表示)。ランチャーは値を -Xmx<n>M に変換して JVM に渡します。
同じスライダーは Settings → Java → Java Memory にもグローバル設定として存在。インスタンス別設定が指定されていないインスタンスはこちらをデフォルトとして使います。普段使い用にグローバルは低めにしておき、重い Modpack のみ個別に上げる運用が可能。
Aikar’s flags
スループットより短いポーズを優先するよう G1 を調整する長い JVM 引数セット。元は Minecraft サーバー向けに書かれたものですが、大型 Mod クライアントにも有用。こんな感じ:
-XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 ...
GDLauncher はデフォルトで適用しません。使うにはインスタンスの Settings タブの Instance Java Arguments フィールドに文字列全体を貼り付け (グローバル適用なら Settings → Java → Java Arguments)。効果は様々で、最も安定したメリットは 6~10 GB ヒープでの長ポーズ削減。
注意点:
- 古い Java バージョン向けにチューニングされています。Java 17+ ではデフォルトがすでに良く、Aikar’s の利益は小さくなります。
- サーバー型のメモリ割り当てパターンを想定。小ヒープのデスクトップでは逆効果になることも。
- メモリ量を増やすわけでも、ゲームの使用量を変えるわけでもなく、コレクタの動きを変えるだけ。
特に理由がなければ、GDLauncher が設定した Java Arguments のままにしておくのが無難。
カクつきの診断
Minecraft が数秒ごとに数百ミリ秒停止する場合:
- F3 デバッグ画面を開き、右上の “Mem:” 行を確認。低値と高値の間で素早く跳ねていれば GC チャーン。
- Xmx を 1~2 GB 減らして再試行。直感に反するが、小ヒープは GC が速い。
- 特定 Mod が大量割り当てしている場合 (一部の事前生成やレンダリング Mod)、Mod 側プロファイラ (Spark、JmxMC) で判明します。Mod 更新が必要かも。
- ポーズ中 CPU が 100% なら GC が本気で動いています。Xmx をさらに下げるかメモリ食い Mod を外す。
まとめ
- Java Memory は「持ってる分」ではなく「ちょうど足りる量」に設定。
- ボトルネックは GC ポーズ時間、ヒープサイズではない。
- Aikar’s flags は大ヒープで効くが万能薬ではない。
- ほぼすべての Mod 環境で 4~6 GB が適切。