Java 8以降になってAPIドキュメント以外をあまり見ていなかったのですが、いろんなドキュメントが見やすくなって
いるんだなぁと。
で、こちらのドキュメントがちょっと気になりまして。
Java 8の頃に比べると、だいぶ差が。
Java Platform, Standard Edition HotSpot Virtual Machineガベージ・コレクション・チューニング・ガイド, リリース8
どうしてこのあたりを見ているかというと、Java 9以降でデフォルトになったG1GCですがどれくらいのヒープサイズ以上が
目安なのか、どこかに書いてあったかなぁということで探してみたと。
書いてありました。
最大10GBまたはそれ以上のヒープ・サイズ(Javaヒープの50%超がライブ・データで占められている)。
これ、Java 9の時点で書いてあったんですね。
Java 8の時点ではこうでした。
Javaヒープの50%超がライブ・データで占められている。
「最大10GBまたは〜」あたりが増えてますね。10GBですか…。
エルゴノミクスについて。
使用可能なコレクタと、コレクタの選択について。
G1GC(デフォルトのGC)。
Parallel GC。
ZGC(実験的な機能:低レイテンシが要求される、または巨大なヒープ(数TB)を使用するアプリケーションが対象)。
GCの切り替えだけ、軽く確認。
環境。
$ java --version openjdk 11.0.8 2020-07-14 OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04) OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
切り替え方は、各GCのページを見るか、コレクタの選択ページを見ると良いでしょう。
デフォルトはG1GCです。
$ java -XX:+PrintFlagsFinal --version | grep G1GC bool UseG1GC = true {product} {ergonomic}
明示的に指定。
$ java -XX:+PrintFlagsFinal -XX:+UseG1GC --version | grep G1GC bool UseG1GC = true {product} {command line}
Parallel GC。
$ java -XX:+PrintFlagsFinal -XX:+UseParallelGC --version | grep Parallel bool AllowParallelDefineClass = false {product} {default} bool CMSParallelInitialMarkEnabled = true {product} {default} bool CMSParallelRemarkEnabled = true {product} {default} bool CMSParallelSurvivorRemarkEnabled = true {product} {default} uintx ParallelGCBufferWastePct = 10 {product} {default} uint ParallelGCThreads = 8 {product} {default} size_t ParallelOldDeadWoodLimiterMean = 50 {product} {default} size_t ParallelOldDeadWoodLimiterStdDev = 80 {product} {default} bool ParallelRefProcBalancingEnabled = true {product} {default} bool ParallelRefProcEnabled = false {product} {default} size_t PreTouchParallelChunkSize = 1073741824 {product} {default} bool UseParallelGC = true {product} {command line} bool UseParallelOldGC = true {product} {default}
ZGC。
$ java -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseZGC --version | grep ZGC bool UseZGC = true {experimental} {command line}
$ java -XX:+PrintFlagsFinal -XX:+UseConcMarkSweepGC --version | grep ConcMarkSweep OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. bool UseConcMarkSweepGC = true {product} {command line}
いつも以上に、ただのメモです。
ちゃんと読もう…。