往往在生产环境中,我们不能采用默认的 jvm 参数进行项目的启动,针对某一些业务场景,采用特定的 jvm 启动参数,进行线上程序的调优使我们工作中应该掌握的技能之一。

一、常用的 JVM 指令参数

1、-Xms: 堆的初始容量大小。默认为物理内存的 1/64;

2、-Xmx:堆的最大容量大小。默认为物理内存的 1/4;

3、-Xlog:gc 打印 gc 的简要日志。

打印 gc 的日志的指令有很多,

指令 描述
-Xlog:gc 打印 GC 的简要日志
-Xlog:gc* 打印 GC 的详细日志
-Xlog:gc:user-gc.log 指定 gc log 的位置,以文件的形式输出
-Xlog:gc+heap=debug 每次 GC 后,都打印堆信息

4、-Xmn:定义新生代大小,默认为整个堆得 3/8;

5、启动参数选择 GC 垃圾回收参数。
随着现在 jdk 版本的更新,越来越多的垃圾回收算法新增,万变不离其宗。现在的垃圾回收,底层都是 标记-清除-整理 进行垃圾回收的。通过早期的 CMS 垃圾回收器、到之后的 G1 垃圾回收器、再到现在的 ZGC 垃圾回收器。他们的目的只有一个:更高效的回收 JVM 内垃圾数据。从早期的 分代收集算法、再到现在的分区收集算法,都是对 GC 的一种更新。合理的在程序启动选择合适的垃圾回收器会给我们带来更棒更稳定的体验。
选择垃圾回收器指令:-XX:+Use 指令。

  1. -XX:+UseConcMarkSweepGC : 使用早期的 CMS 垃圾回收器。
  2. -XX:+UseG1GC : 使用流行的 G1 垃圾回收器。