注意注意
- -横杠开头都是标志参数(所有JVM适用)
- -X是非标参数(本版本JDK适用)
- -XX是不稳定参数(不稳定,可能下个小版本号的JVM就不适用了)
- 设置堆大小
一般我们将两个数设置为一样的,避免因对象数量和大小的变化导致堆扩大或缩小占用宝贵的CPU计算资源。
-Xms200M # 设置堆最“小”的大小为200M -Xmx200M # 设置堆最“大”的大小为200M
- 指定使用那种垃圾处理器组合
-XX:+UseSerialGC # 使用 Serial New + Serial Old 的组合垃圾回收器(淘汰) -XX:+UseParNewGC # 使用 ParNew + Serial Old 组合(基本不用) -XX:+UseConc(urrent)MarkSweepGC # 使用 ParNew + CMS + Serial Old (响应时间优先 + 有缺陷)括号里代表有些版本要加,本版本不需要加 -XX:+UseParallelGC # 使用 Parallel Scavenge + Parallel Old (吞吐量优先 + JDK默认) -XX:+UseParallelOldGC # 同上 -XX:+UseG1GC # 使用 G1 垃圾回收器,一个逻辑分代物理不分代的垃圾回收器,适用于大内存(20G+)
- 打印打击回收日志
-XX:+PrintGC # 打印 GC 信息 -XX:+PrintGCDetails # 打印更加详细的 GC 信息 -XX:+PrintGCCause # 打印 GC 原因 -XX:+PrintGCTimeStamps # GC执行的时间戳
- 生成 dump 堆转储文件
-XX:+HeapDumpOnOutOfMemoryError # 在抛出 OOM 的时候自动生成堆转储文件 # 在 Java 程序运行的时候手动生成堆转储文件,但是因为特别消耗资源,所以在生产环境中不建议使用 jps # 使用 jps 查看运行中的 Java 程序以及程序的进程号(PID) jmap -dump:format=b,file={文件生成路径+文件名} {jps 命令查找之后的进程ID} # 生成堆转储文件的命令
- 其他参数
-XX:+UseTLAB # 使用 TLAB,默认打开,将 “+” 改为 “-” 则关闭 -XX:+PrintTLAB # 打印 TLAB 的使用情况 -XX:TLABSize=2M # 设置 TLAB 大小为2M -XX:+DisableExplicitGC # 禁用 System.gc() 方法,该方法执行后不会产生 FGC -XX:+PrintHeapAtGC # 打印 GC 堆栈情况 -XX:+PrintGCApplicationConcurrentTime # 打印应用程序响应时长 -XX:+PrintGCApplicationStoppedTime # 打印应用程序暂停时长 -XX:+PrintReferenceGC # 记录回收了多少种不同引用类型的引用 -XX:+PrintVMOptions # 打印 JVM 的参数 -XX:+PrintFlagsFinal # 打印最终的参数 -XX:+PrintFlagsInitial # 打印初始化默认的参数 -Xloggc:/opt/log/gc.log # gc 日志记录 -XX:MaxTenuringThreshold=14 # 设置 GC 升代年龄为14,默认和最大都是15 # 以下两个参数建议默认就好,不要设置 -XX:PreBlockSpin=9 # 设置 synchronize 锁升级当中自旋锁的自旋次数(本版本已被废弃,之前版本可以使用,具体哪个版本可自行实验) -XX:CompileThreshold=10001 # 设置热点代码检测阈值
- Parallel 垃圾回收器常用参数
-XX:SurvivorRatio=6 # 新生代中各区比例,默认 8:1:1,改参数被设定为 6:1:1,因为 from 区和 to 区的大小必须为 2 的整数次幂,所以数值会有偏差 -XX:ParallelGCThreads=8 # 并行收集器的线程数,同样适用于 CMS,一般设为和 CPU 核数相同
有很多省略,欢迎评论区补充