当前位置: 首页 > 后端技术 > Java

JVM启动参数简述

时间:2023-04-01 20:19:59 Java

JVM启动参数格式JVM启动参数约有1000个,可分为以下几种格式:以-开头:标准参数。所有JVM都必须实现这些参数并且向后兼容。如:-服务器。以-D开头:设置系统属性。例如:-Dfile.encoding=UTF-8。以-X开头:非标准参数。基本上,它们被传递给JVM。默认情况下,JVM实现了这些参数的功能,但不保证所有的JVM都满足,也不保证向后兼容。例如:-Xmx4g、-Xms2g。可以使用java-X命令查看当前JVM支持的非标准参数。以-XX开头:参数不稳定。专门用于控制JVM的行为,与具体的JVM实现有关,可能在下个版本中随时取消。-XX:+-Flags形式:+-是切换布尔值。例如:-XX:+UseG1GC。-XX:key=value格式:指定特定选项的值。例如:-XX:NewRatio=2。JVM启动参数的种类根据JVM启动参数的特点和作用可以分为以下几类:系统属性参数、运行模式参数、堆内存设置参数、GC设置参数、分析诊断参数启动参数配置系统属性,例如:-Dfile.encoding=UTF-8-Duser.timezone=GMT+08-Dmaven.test.skip=true-Dio.netty.eventLoopThreads=8-Da=A100通过JVM启动参数配置的标准格式系统属性是:-Dargname=argvalue。多个参数之间用空格隔开,参数值中有空格的用引号引起来。系统参数可分为两种类型:JavaDefault。此类参数是JVM虚拟机自动识别并生效的,例如-Dfile.encoding=UTF-8用于指定文件编码格式。风俗。例如-Da=A100,可以在程序中读取该参数的值来执行相关逻辑。系统属性参数是系统级的全局变量,可以在程序的任何地方访问。在程序中可以通过以下方式获取配置的系统属性:Stringa=System.getProperty("a");也可以通过System.setProperty方法在程序中配置系统属性。例如:System.setProperty("a","A100");2.运行模式参数JVM运行模式:-server:设置JVM使用服务器模式,其特点是启动速度慢,但运行时性能和内存管理效率高,适用于生产环境。64位JDK下默认启用该模式,忽略-client参数。-client:JDK1.7之前的32位x86机器上的默认值为-client选项。设置JVM使用客户端模式,其特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或PC应用程序的开发调试。另外,我们知道JVM加载字节码后,可以解释执行,也可以编译成本地代码再执行,所以可以配置JVM对字节码的处理方式:-Xint:interpreted模式。将强制JVM解释和执行所有字节码,这当然会减慢速度,通常减慢10倍或更多。-Xcomp:编译模式。-Xcomp参数与-Xint正好相反。JVM在第一次使用时会将所有字节码编译成nativecode,从而带来最大程度的优化。(实际使用时注意预热)-Xmixed:混合模式,混合解释模式和编译模式。这是JVM默认的模式,也是推荐的模式。我们可以使用java-version查看混合模式等信息。3、堆内存设置参数下面只列出几个常用的堆内存设置参数:-Xmx:指定最大堆内存,如-Xmx4g。只限制堆内存,不包括栈内存,不包括堆外使用的内存。如果一台4G的机器只部署一个Java程序,设置-Xmx为3G比较合适。-Xms:指定堆内存空间的初始大小。比如-Xms4g。而且,指定的内存大小并不是操作系统实际分配的初始值,而是GC先规划好,用到的时候再分配。需要在专用服务器上保持-Xms和-Xmx一致,否则应用启动后可能会出现多次FullGC。当两种配置不一致时,堆内存扩展可能会导致性能抖动。-XX:MaxMetaspaceSize=size:Java8默认为-1,即不限制Meta空间,一般不允许设置该选项。4.GC相关-XX:+UseSerialGC:使用串行垃圾收集器(serial+serialold)-XX:+UseParallelGC:使用并行垃圾收集器(parallelsavege+parallelold)-XX:+UseConcMarkSweepGC:使用ParNew收集器(新生代)+CMS收集器(老年代)的GC组合-XX:+UseG1GC:使用G1垃圾收集器-XX:+UnlockExperimentalVMOptions-XX:+UseZGC:使用ZGC前必须解锁JDK11。-XX:+UnlockExperimentalVMOptions-XX:+UseShenandoahGC:使用ShenandoahGC前必须解锁JDK12。5、分析诊断参数-XX:+-HeapDumpOnOutOfMemoryError:当发生OutOfMemoryError,即内存溢出时,自动转储堆内存。示例:java-XX:+HeapDumpOnOutOfMemoryError-Xmx256mJavaApp。-XX:HeapDumpPath:与HeapDumpOnOutOfMemoryError配合使用,指定内存溢出时Dump文件的目录。如果未指定,则默认为启动的Java程序的工作目录。示例:java-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/usr/local/JavaApp。-XX:OnError:发生致命错误时执行的脚本。比如写一个脚本记录错误时间,执行一些命令,或者curl一个在线告警的url。-XX:OnOutOfMemoryError:抛出OutOfMemoryError错误时执行的脚本。-XX:ErrorFile=filename:致命错误日志文件名,绝对路径或相对路径。启用远程调试:需要多个参数。以下示例表明8888作为远程调试端口公开:java-Djavax.net.debug=ssl-Xdebug-Xnoagent-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888-jarspringboot-1.0.jar。6、JavaAgent参数JavaAgent是JVM中的一项黑科技。它的原理是提供一个额外的Agent库,在我们的命令行启动参数中配置。JVM启动后,会在加载所有类文件之前加载。Agent库可以使用Agent的一些内置逻辑来预处理我们加载的所有类文件,并对它们进行增强或转换。然后,在不改变原来的jar包和类文件的情况下,可以对所有原始类在运行时加载的方式进行改进。所以这是一种增强现有程序功能的非侵入式方法。设置代理的语法如下:-agentlib:libname[=options]:在本机模式下启用代理。-agentpath:pathname[=options]:在本地模式下启用代理。-javaagent:jarpath[=options]:启用外部代理库,如pinpoint.jar等。-Xnoagent禁用所有代理。