??启动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:+
来开启,通过-XX:-
来关闭。 - 对于数字(Numberic)类型的配置选项,通过
-XX:
来配置。
后面可以携带单位字母,比如: 'k'或者'K'代表千字节,'m'或者'M'代表兆字节,'g'或者'G'代表千兆字节。 - 对于字符串(String)类型的配置选项,通过
-XX:
来配置。这种配置通过用来指定文件,路径或者命令列表。
-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参数