启动JVM时通过指定配置参数来领导虚拟机依照咱们的要求提供服务,这一点对大多数的Java程序员来说曾经是司空见惯。
配置参数 | 类型 | 阐明 | 举例 |
---|---|---|---|
-X | non-standard | 非标准参数。这些参数不是虚拟机标准规定的。因而,不是所有VM的实现(如:HotSpot,JRockit,J9等)都反对这些配置参数。 | -Xmx、-Xms、 -Xmn、-Xss |
-XX | not-stable | 不稳固参数。这些参数是虚拟机标准中规定的。这些参数指定虚拟机实例在运行时的各种行为,从而对虚拟机的运行时性能有很大影响。 | -XX:SurvivorRatio、 -XX:+UseParNewGc |
备注:
-X和-XX两种参数都可能随着JDK版本的变更而产生变动
,有些参数能够能会被废除掉,有些参数的性能会产生扭转,然而JDK官网不会告诉开发者这些变动,须要使用者留神。
-XX参数被称为不稳固参数
,是因为这类参数的设置会引起JVM运行时性能上的差别,配置切当能够进步JVM性能,配置不当则会使JVM呈现各种问题, 甚至造成JVM解体。
- 对于-XX类型的配置选项,虚拟机标准有一些常规,针对不同的平台虚拟机也会提供不同的默认值。
- 对于布尔(Boolean)类型的配置选项,通过
-XX:+<option>
来开启,通过-XX:-<option>
来敞开。 - 对于数字(Numberic)类型的配置选项,通过
-XX:<option>=<number>
来配置。<number>
前面能够携带单位字母,比方: 'k'或者'K'代表千字节,'m'或者'M'代表兆字节,'g'或者'G'代表千兆字节。 - 对于字符串(String)类型的配置选项,通过
-XX:<option>=<string>
来配置。这种配置通过用来指定文件,门路或者命令列表。
-D
是jvm启动时给零碎参数赋值用的(能够是零碎默认有的参数,也能够是本人定义的参数),这个过程会在jvm开始java应用程序之前执行。这个参数赋值也能够通过应用System.setProperty(key, value)
;来实现。
-Dspring.profiles.active=test-Dhsf.server.port=12404-Dpandora.qos.port=12401-Dhsf.http.port=12402
十个常见的jvm参数
1.-Xms:初始堆大小。只有启动,就占用的堆大小。2.-Xmx:最大堆大小。java.lang.OutOfMemoryError:Java heap这个谬误能够通过配置-Xms和-Xmx参数来设置。3.-Xss:栈大小调配。栈是每个线程公有的区域,通常只有几百K大小,决定了函数调用的深度,而局部变量、参数都调配到栈上。当呈现大量局部变量,递归时,会产生栈空间OOM(java.lang.StackOverflowError)之类的谬误。4.XX:NewSize:设置新生代大小的绝对值。5.-XX:NewRatio:设置年老代和年轻代的比值。比方设置为3,则新生代:老年代=1:3,新生代占总heap的1/4。6.-XX:MaxPermSize:设置长久代大小。java.lang.OutOfMemoryError:PermGenspace这个OOM谬误须要正当调大PermSize和MaxPermSize大小。7.-XX:SurvivorRatio:年老代中Eden区与两个Survivor区的比值。留神,Survivor区有form和to两个。比方设置为8时,那么eden:form:to=8:1:1。8.-XX:HeapDumpOnOutOfMemoryError:产生OOM时转储堆到文件,这是一个十分好的诊断办法。9.-XX:HeapDumpPath:导出堆的转储文件门路。10.-XX:OnOutOfMemoryError:OOM时,执行一个脚本,比方发送邮件报警,重启程序。前面跟着一个脚本的门路。
轻松记住jvm参数