打印默认的jvm参数值
java -XX:+PrintFlagsInitial
内存
最大堆内存默认为物理内存的1/4
新生代默认为堆内存的1/3
基本原则
Parallel
- 除非确定,否则不要设置最大堆内存
- 优先设置吞吐量目标
- 如果吞吐量目标达不到,调大最大内存,不能让OS使用Swap,如果仍然达不到,降低目标。
- 吞吐量能达到,GC时间太长,设置停顿时间的目标。
- 适合考虑吞吐量优先的场景。
设置metaspace
设置吞吐量和停顿时间参数
-XX:MaxGCPauseMillis=100
-XX:GCTimeRatio=99
设置动态扩容增量
-XX:YoungGenerationSizeIncrement=30
CMS
- 适合有限的低延迟,且每次GC时间尽可能的 短。
G1
年轻代大小:避免使用-Xmn、-XX:NewRatio等显示设置Young区大小,会暂停时间目标。
暂停时间目标:暂停时间不要太严苛,其默认的吞吐量目标是90%的应用程序时间和10%的垃圾回收时间,太严苛会直接影响吞吐量。一般适合4g以上的大内存场景。
关于MinGC
设置堆内存大小
-Xms128
-Xmx128
设置停顿时间
-XX:MaxGCPauseMillis=100
ZGC
更大的内存,比如32G内存。