JVM -D -X -XX 参数的区别

??启动JVM时通过指定配置参数来指导虚拟机按照我们的要求提供服务,这一点对大多数的Java程序员来说已经是司空见惯。

配置参数 类型 说明 举例
-X non-standard 非标准参数。这些参数不是虚拟机规范规定的。因此,不是所有VM的实现(如:HotSpot,JRockit,J9等)都支持这些配置参数。 -Xmx、-Xms、
-Xmn、-Xss
-XX not-stable 不稳定参数。这些参数是虚拟机规范中规定的。这些参数指定虚拟机实例在运行时的各种行为,从而对虚拟机的运行时性能有很大影响。 -XX:SurvivorRatio、
-XX:+UseParNewGc
【JVM -D -X -XX 参数的区别】备注:
?-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参数 JVM -D -X -XX 参数的区别
文章图片

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

    推荐阅读