为什么选择SerialGC而不是G1GC?
2022-09-04 19:48:48
我在非常相似的虚拟机上运行Java,我找不到为什么在一种情况下选择SerialGC而不是G1GC的解释。它是相同的Java版本,相同的操作系统,相同的AWS实例类型,我怀疑唯一的区别是容器设置,但我不知道如何查明哪些更改。有没有办法解释为什么 VM 决定选择此设置或其他设置?
两种情况下的 Java 版本:
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
在一种情况下运行 Java 时:
java -XX:+PrintFlagsFinal -XX:+PrintCommandLineFlag
输出:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
-XX:InitialHeapSize=253366976 -XX:MaxHeapSize=4053871616 -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseSerialGC
[Global flags]
(...)
bool UseG1GC = false {product} {default}
bool UseParallelGC = false {product} {default}
bool UseSerialGC = true {product} {ergonomic}
另一个:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
-XX:G1ConcRefinementThreads=8 -XX:InitialHeapSize=253480064 -XX:MaxHeapSize=4055681024 -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC
[Global flags]
(...)
bool UseG1GC = true {product} {ergonomic}
bool UseParallelGC = false {product} {default}
bool UseSerialGC = false {product} {default}