参考:

最终脚本:https://github.com/tianyunperfect/springboot-parent/blob/master/app/bin/boot.sh

G1是一种服务端应用使用的垃圾收集器,目标是用在多核、大内存的机器上,它在大多数情况下可以实现指定的GC暂停时间,同时还能保持较高的吞吐量。

-XX:G1HeapRegionSize

默认会将堆分成2048份,可以使用默认。

-XX:MaxGCPauseMillis

默认200,建议默认。会根据实际情况修改堆内部内存分配的比例。

-XX:InitiatingHeapOccupancyPercent

触发标记周期的 Java 堆占用率阈值。默认占用率是整个 Java 堆的 45%。

-XX:+TieredCompilation

分层编译,加上后,启动后不会立即编译所有代码。

-XX:ReservedCodeCacheSize

JVM调优-G1 - 图1

当JIT运行过程中将JAVA代码进行底层代码编译,让程序从解释运行模式变成性能更高的编译运行模式,这个cache就是用来保存编译后代码的内存,之前出现了程序压测30小时之后CPU100%的问题,经过排查就是因为这个cache满了造成优化被关闭。Jvm日志里面会有输出:CodeCache is full. Compiler has been disabled。

  1. -XX:ReservedCodeCacheSize=256m

-XX:+UseCodeCacheFlushing

在JIT被关闭之前,也就是CodeCache装满之前,会在JIT关闭前做一次清理,删除一些CodeCache的代码;
如果清理后还是没有空间,那么JIT依然会关闭。这个选项默认是关闭的;
和上一个结合使用

-XX:ParallelGCThreads

JVM在进行并行GC的时候,用于GC的线程数,默认即可,会自动根据硬件选择合适的线程数。

类似:-XX:ConcGCThreads:并发垃圾收集器将使用的线程数。 缺省值随运行JVM的平台而异。