第一次全面了解JVM调优参数命令,所以我打算结合JVM内存区域与参数的对照图,做一份笔记。下面我列出一些常用的jvm参数,供新手朋友们参考
标准参数:
控制台输入命令java -help 可以查看所有的java标准参数
C:\Windows\system32>java -help
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用)
-d64 使用 64 位数据模型 (如果可用)
-server 选择 "server" VM
默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 ; 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version 输出产品版本并退出
-version:<值>
警告: 此功能已过时, 将在
未来发行版中删除。
需要指定的版本才能运行
-showversion 输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
警告: 此功能已过时, 将在
未来发行版中删除。
在版本搜索中包括/排除用户专用 JRE
-? -help 输出此帮助消息
-X 输出非标准选项的帮助
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
按指定的粒度启用断言
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
禁用具有指定粒度的断言
-esa | -enablesystemassertions
启用系统断言
-dsa | -disablesystemassertions
禁用系统断言
-agentlib:<libname>[=<选项>]
加载本机代理库 <libname>, 例如 -agentlib:hprof
另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:<pathname>[=<选项>]
按完整路径名加载本机代理库
-javaagent:<jarpath>[=<选项>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:<imagepath>
使用指定的图像显示启动屏幕
X参数
参考资料:《Java8 JVM参数解读》 :https://yq.aliyun.com/articles/368436
非标准化参数
-Xbatch
禁止后台编译。将编译过程放到前台任务执行。JVM默认会将编译任务当做后台任务执行。这个参数等价于-XX:-BackgroundCompilation
-Xfuture
强制class文件格式检查。
-Xint
在 interpreted-only模式运行程序。编译为native的模式不再生效,所有的字节码都在解释器环境下解释执行。
-Xinternalversion
打印一个更详细的java版本信息,执行后退出。
-Xloggc:filename
设置gc日志文件,gc相关信息会重定向到该文件。这个配置如果和-verbose:gc
同时出现,会覆盖-verbose:gc
参数。
-Xmixed
用解释器执行所有的字节码,除了被编译为native code的hot method。
-Xnoclassgc
关闭对class的GC。这样设置可以节约一点GC的时间,不过带来的影响就是class永驻内存,不当的使用会导致OOM风险。
-XshowSettings:category
查看settings信息,category可以是all、locale、properties和vm几部分。
-Xverify:mode
设置字节码校验器的模式,默认是remote,即只校验那些不是通过bootstrap类加载器加载的字节码。而还有一个模式还all,即全部都校验。虽然还有一个模式是none,但是本质上jvm不生效这个参数。因为字节码校验是非常重要的,如果关闭,将可能导致class文件格式就是错的,这对于系统稳定和安全来说有重大风险。
XX参数(主要用来JVM调优)
1、boolean类型参数
大家都见过下面的这两种写法吧【-XX:-】 【-XX:+】,他们的不同点就是一个是“-”一个是“+”,减号表示false,也就是不开启的意思,+表示true,也就是开启的意思
2、Map类型参数
也就是key value类型的参数,例如-XX:MetaspaceSize=size 设置初始空间大小,key就是MetaspaceSize,value就是size。
有时候也会用简写的方式-Xms -Xms,他其实就是-XX参数的一种简写
等价于-XX:InitialHeapSize=size和 -XX:MaxHeapSize=size