JVM参数紧张分为以下三种(可以根据书写形式来区分):

1、标准参数

标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变革而变革。

vm代替jspJava虚拟机详解五JVM参数 JavaScript

我们可以通过 -help 命令来检索出所有标准参数。

关于这些命令的详细阐明,可以参考官网:https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html

-help 也是一个标准参数,再比如利用比较多的 -version也是。

①、-version

显示Java的版本信息。

2、X 参数

对应前面讲的标准化参数,这是非标准化参数。
表示在将来的JVM版本中可能会发生改变,但是这类以 -X开始的参数变革的比较小。

我们可以通过 Java -X 命令来检索所有-X 参数。

关于这些参数的先容,实在上图的中文阐明很清楚了,这里我们不作过多的先容。

3、XX参数

这是我们日常开拓中打仗到最多的参数类型。
这也是非标准化参数,相对来说不稳定,随着JVM版本的变革可能会发生变革,紧张用于JVM调优和debug。

把稳:这种参数是我们后续先容JVM调优讲解最多的参数。

该参数的书写形式又分为两大类:

①、Boolean类型

格式:-XX:[+-]<name> 表示启用或者禁用name属性。

例子:-XX:+UseG1GC(表示启用G1垃圾网络器)

②、Key-Value类型

格式:-XX:<name>=<value> 表示name的属性值为value。

例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿韶光是500ms)

4、参数详解(持续更新)

本节我们会持续更新罗列一些JVM参数。

1、最大堆和最小堆内存设置

-Xms512M:设置堆内存初始值为512M

-Xmx1024M:设置堆内存最大值为1024M

这里的ms是memory start的简称,mx是memory max的简称,分别代表最小堆容量和最大堆容量。
但是别看这里是-X参数,实在这是-XX参数,等价于:

-XX:InitialHeapSize

-XX:MaxHeapSize

在常日情形下,做事器项目在运行过程中,堆空间会不断的紧缩与扩展,势必会造成不必要的系统压力。
以是在生产环境中,JVM的Xms和Xmx要设置成一样的,能够避免GC在调度堆大小带来的不必要的压力。

2、Dump非常快照以及以文件形式导出

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath

堆内存涌现OOM的概率是所有内存耗尽非常中最高的,出错时的堆内信息对办理问题非常有帮助,以是给JVM设置这个参数(-XX:+HeapDumpOnOutOfMemoryError),让JVM碰着OOM非常时能输出堆内信息,并通过(-XX:+HeapDumpPath)参数设置堆内存溢出快照输出的文件地址,这对付特殊是对相隔数月才涌现的OOM非常尤为主要。

这两个参数常日配套利用:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./oom.dump

3、发送OOM后,实行一个脚本

-XX:OnOutOfMemoryError

比如这样设置:

-XX:OnOutOfMemoryError=\"大众C:\Program Files\Java\jdk1.8.0_152\bin\jconsole.exe\"大众

表示发生OOM后,运行jconsole.exe程序。
这里可以不用加“”,由于jconsole.exe路径Program Files含有空格。

利用这个参数,我们可以在系统OOM后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。

4、打印gc信息

①、打印GC大略信息

-verbose:gc

-XX:+PrintGC

一个是标准参数,一个是-XX参数,都是打印详细的gc信息。
常日会打印如下信息:

比如第一行,表示GC回收之前有12195K的内存,回收之后剩余1088K,统共内存为125951K

②、打印详细GC信息

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

5、指定GC日志以文件输出

-Xloggc:./gc.log

这个在参数用于将gc日志以文件的形式输出,更方便我们去查看日志,定位问题。

6、设置永久代大小

-XX:MaxPermSize=1280m

在JDK1.7以及以前的版本中,只有Hotspot 才有Perm区,称为永久代,它在启动时固定大小,很难进行调优。

在某些情形下,如果动态加载类过多,随意马虎产生Perm区的 OOM。
比如某个实际 Web 工程中,由于功能点较多,在运行过程中,要不断动态加载很多类,就会涌现类似缺点:

\"大众Exception in thread 'dubbo client x.x.connect' java.lang.OutOfMemoryError:PermGenspace\公众

为理解决这个问题,就须要在项目启动时,设定运行参数-XX:MaxPermSize。

把稳:在JDK1.8往后面的版本,利用元空间来代替永久代。
在 JDK1.8以及后面的版本中,如果设定参数-XX:MaxPermSize,启动JVM不会报错,但是会提示:

Java Hotspot 64Bit Server VM warning:ignoring option MaxPermSize=1280m:support was removed in 8.0

7、垃圾网络器常用参数

参考文档:https://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html