JVM 手册

记录常用的 JVM 参数,持续更新 …

堆内存设置

-Xms128M : 设置 java 程序启动时堆内存 128M(默认为物理内存 1/64,且小于 1G),阿里 p3c 文档中推荐 Xmx 与 Xms 配置同样的大小,避免 GC 后调整堆大小带来的压力

-Xmx256M : 设置最大堆内存 256M,超出后会出现 OutOfMemoryError(默认为物理内存 1/64,且小于 1G)

-Xmn10M : 设置新生代区域大小为 10M

-XX:NewSize=2M : 设置新生代初始大小为 2M

-XX:MaxNewSize=2M : 设置新生代最大值为 2M

-Xss1M : 设置线程栈的大小 1M(默认 1M)

-XX:MinHeapFreeRatio=40 : 设置堆空间最小空闲比例(默认 40)(当 Xmx 与 Xms 相等时,该配置无效)

-XX:MaxHeapFreeRatio=70 : 设置堆空间最大空闲比例(默认 70)(当 Xmx 与 Xms 相等时,该配置无效)

-XX:NewRatio=2 : 设置年轻代与年老代的比例为 2:1

-XX:SurvivorRatio=8 : 设置年轻代中 eden 区与 survivor 区的比例为 8 : 1

-XX:MetaspaceSize=64M : 设置元数据空间初始大小(取代-XX:PermSize)

-XX:MaxMetaspaceSize=128M : 设置元数据空间最大值(取代之前-XX:MaxPermSize)

-XX:TargetSurvivorRatio=50 : 设置 survivor 区使用率。当 survivor 区达到 50%时,将对象送入老年代

-XX:+UseTLAB : 在年轻代空间中使用本地线程分配缓冲区(TLAB),默认开启

-XX:TLABSize=512k : 设置 TLAB 大小为 512k

-XX:+UseCompressedOops : 使用压缩指针,默认开启

-XX:MaxTenuringThreshold=15 : 对象进入老年代的年龄(Parallel 是 15,CMS 是 6)

垃圾收集器相关参数

-XX:+UseSerialGC : 启用 Serial 收集器,开启之后会默认启用 Serial(年轻代)+ Serial Old(年老代)的收集器组合。

-XX:+UseParNewGC : 启用 ParNew 收集器,开启之后会默认启用 ParNew(年轻代)+ Serial Old(老年代,该收集器已过时)的收集器组合,新生代使用复制算法,老年代采用标记-整理算法。推荐配合老年代使用 CMS 收集器。

-XX:+UseParallelGC : 启用 Parallel 收集器,Java8 默认启用该收集器,俗称吞吐量优先的收集器。开启之后默认启用 Parallel Scavenge(年轻代)+ Parallel Old(老年代)。与 ParNew 的区别在于自适应调节策略,虚拟机会根据当前系统的运行情况手机性能监控信息,动态调整参数以提供最合适的停顿时间或最大吞吐量。新生代采用复制算法,老年代采用标记-整理算法。

-XX:+UseParallelOleGC : 启用 Parallel 收集器,与 -XX:+UseParallelGC 可相互激活。

-XX:+ParallelGCThreads : 限制垃圾收集的线程数量,默认开始和 CPU 数量相同的线程数。

-XX:+UseConcMarkSweepGC : 启用 CMS 收集器,开启该参数之后,默认打开 -XX:+UseParNewGC,启用 ParNew(年轻代)+ CMS(老年代)+ Serial Old(老年代)收集器的组合,Serial Old 将作为 CMS 出错的后备收集器。

-XX:+UseG1GC : 启用 G1 收集器,G1 收集器不同于以往的收集器,G1 收集器既可以回收年轻代的垃圾也可以回收年老代的垃圾。

GC 相关的参数

-XX:+PrintGC : 输出 GC 日志

-XX:+PrintGCDetails : 输出 GC 的详细日志

-XX:+PrintGCTimeStamps : 输出 GC 的时间戳(以基准时间的形式)

-XX:+PrintGCDateStamps : 输出 GC 的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)

-XX:+PrintHeapAtGC : 在进行 GC 的前后打印出堆的信息

-XX:+PrintGCApplicationStoppedTime : 输出 GC 造成应用暂停的时间

-Xloggc:../logs/gc.log : 日志文件的输出路径

其他

-XX:+HeapDumpOnOutOfMemoryError : 让 JVM 碰到 OOM 场景时输出 dump 信息。 说明:OOM 的发生是有概率的,甚至有规律地相隔数月才出现一例,出现时的现场信息对查错 非常有价值。

-XX:MaxGCPauseMillis : 设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM 会自动调整年轻代大小,以满足此值。

-XX:+TraceClassLoading : 跟踪类的加载信息

-XX:+PrintCommandLineFlags : 打印启动命令参数