启动 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 参数