在jvm中有很多的参数可以进行设置,这样可以让jvm在各种环境中都能高效的运行,绝大部分的参数保持默认即可

三种参数类型

jvm的参数类型分为三类,分别是

* 标准参数* -help* -version* -server与-client
*  -X参数 (非标准参数) * -Xint* -Xcomp
* -XX参数(使用率较高)* -XX:newSize* -XX:+UseSerialGC

标准参数

-help

jvm的标准参数,一般都是很稳定的,在未来的JVM版本中不会改变,可以使用java -help

检索出所有的标准参数。

    [root@localhost ~]# java -help用法: java [options] <主类> [args...]Usage: java [-options] class [args...](to execute a class)or  java [-options] -jar jarfile [args...](to execute a jar file)where options include:-d32          use a 32-bit data model if available-d64          use a 64-bit data model if available-server       to select the "server" VMThe default VM is server.-cp <class search path of directories and zip/jar files>-classpath <class search path of directories and zip/jar files>A : separated list of directories, JAR archives,and ZIP archives to search for class files.-D<name>=<value>set a system property-verbose:[class|gc|jni]enable verbose output-version      print product version and exit-version:<value>Warning: this feature is deprecated and will be removedin a future release.require the specified version to run-showversion  print product version and continue-jre-restrict-search | -no-jre-restrict-searchWarning: this feature is deprecated and will be removedin a future release.include/exclude user private JREs in the version search-? -help      print this help message-X            print help on non-standard options-ea[:<packagename>...|:<classname>]-enableassertions[:<packagename>...|:<classname>]enable assertions with specified granularity-da[:<packagename>...|:<classname>]-disableassertions[:<packagename>...|:<classname>]disable assertions with specified granularity-esa | -enablesystemassertionsenable system assertions-dsa | -disablesystemassertionsdisable system assertions-agentlib:<libname>[=<options>]load native agent library <libname>, e.g. -agentlib:hprofsee also, -agentlib:jdwp=help and -agentlib:hprof=help-agentpath:<pathname>[=<options>]load native agent library by full pathname-javaagent:<jarpath>[=<options>]load Java programming language agent, see java.lang.instrument-splash:<imagepath>show splash screen with specified imageSee http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.
    [root@localhost ~]# java -help用法: java [options] <主类> [args...](执行类)或  java [options] -jar <jar 文件> [args...](执行 jar 文件)或  java [options] -m <模块>[/<主类>] [args...]java [options] --module <模块>[/<主类>] [args...](执行模块中的主类)将主类, -jar <jar 文件>, -m 或 --module<模块>/<主类> 后的参数作为参数传递到主类。其中, 选项包括:-d32      已过时, 在以后的发行版中将被删除-d64      已过时, 在以后的发行版中将被删除-cp <目录和 zip/jar 文件的类搜索路径>-classpath <目录和 zip/jar 文件的类搜索路径>--class-path <目录和 zip/jar 文件的类搜索路径>使用 : 分隔的, 用于搜索类文件的目录, JAR 档案和 ZIP 档案列表。-p <模块路径>--module-path <模块路径>...用 : 分隔的目录列表, 每个目录都是一个包含模块的目录。--upgrade-module-path <模块路径>...用 : 分隔的目录列表, 每个目录都是一个包含模块的目录, 这些模块用于替换运行时映像中的可升级模块--add-modules <模块名称>[,<模块名称>...]除了初始模块之外要解析的根模块。<模块名称> 还可以为 ALL-DEFAULT, ALL-SYSTEM,ALL-MODULE-PATH.--list-modules列出可观察模块并退出-d <module name>--describe-module <模块名称>描述模块并退出--dry-run     创建 VM 并加载主类, 但不执行 main 方法。此 --dry-run 选项对于验证诸如模块系统配置这样的命令行选项可能非常有用。--validate-modules验证所有模块并退出--validate-modules 选项对于查找模块路径中模块的冲突及其他错误可能非常有用。-D<名称>=<值>设置系统属性-verbose:[class|module|gc|jni]启用详细输出-version      将产品版本输出到错误流并退出--version     将产品版本输出到输出流并退出-showversion  将产品版本输出到错误流并继续--show-version将产品版本输出到输出流并继续--show-module-resolution在启动过程中显示模块解析输出-? -h -help将此帮助消息输出到错误流--help        将此帮助消息输出到输出流-X            将额外选项的帮助输出到错误流--help-extra  将额外选项的帮助输出到输出流-ea[:<程序包名称>...|:<类名>]-enableassertions[:<程序包名称>...|:<类名>]按指定的粒度启用断言-da[:<程序包名称>...|:<类名>]-disableassertions[:<程序包名称>...|:<类名>]按指定的粒度禁用断言-esa | -enablesystemassertions启用系统断言-dsa | -disablesystemassertions禁用系统断言-agentlib:<库名>[=<选项>]加载本机代理库 <库名>, 例如 -agentlib:jdwp另请参阅 -agentlib:jdwp=help-agentpath:<路径名>[=<选项>]按完整路径名加载本机代理库-javaagent:<jar 路径>[=<选项>]加载 Java 编程语言代理, 请参阅 java.lang.instrument-splash:<图像路径>使用指定的图像显示启动屏幕自动支持和使用 HiDPI 缩放图像(如果可用)。应始终将未缩放的图像文件名 (例如, image.ext)作为参数传递给 -splash 选项。将自动选取提供的最合适的缩放图像。有关详细信息, 请参阅 SplashScreen API 文档@argument 文件一个或多个包含选项的参数文件-disable-@files阻止进一步扩展参数文件要为长选项指定参数, 可以使用 --<名称>=<值> 或--<名称> <值>。
-version

查看jvm的版本

    [root@localhost ~]# java -versionjava version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

通过-D设置系统属性参数

    package cs.lx.jvm;/*** @项目名称 demo* @包名 cs.lx.jvm* @类名 TestJVM* @作者 lx* @时间 2020/4/19 15:28* @描述*/public class TestJVM {public static void main(String[] args) {String str = System.getProperty("str");if (str == null){System.out.println("你好!!赵丽颖!!!");}else {System.out.println(str);}}}

用Linux编译运行,通过-D设置属性参数

    # 根目录下创建test文件夹存放java文件[root@localhost ~]# mkdir test# 查看目录内容[root@localhost ~]# ll总用量 2drwxr-xr-x. 2 root root    6 10月  8 23:57 test# 进入test目录[root@localhost ~]# cd test# vim命令创建TestJVM.java文件,复制刚刚写的代码,esc返回,shift+:,输入wq保存[root@localhost test]# vim TestJVM.java# 编译class文件[root@localhost test]# javac TestJVM.java [root@localhost test]# ll总用量 8-rw-r--r--. 1 root root 575 10月  8 23:58 TestJVM.class-rw-r--r--. 1 root root 225 10月  8 23:58 TestJVM.java# 运行[root@localhost test]# java  TestJVMmobaijun# 通过-D设置属性参数[root@localhost test]# java -Dstr=nihaojvm TestJVM# 运行结果nihaojvm
-server与-client参数

可以通过-server或-client设置jvm的运行参数。

* 它们的区别是Server VM的初始堆空间会大一些,默认使用的是并行垃圾回收器,启动慢运行快。
* Client VM相对来讲会保守一些,初始堆空间会小一些,使用串行的垃圾回收器,它的目标是为了让JVM的启动速度更快,但运行速度会比Serverm模式慢些。
* JVM在启动的时候会根据硬件和操作系统自动选择使用Server还是Client类型的JVM。
* 32位操作系统* 如果是Windows系统,不论硬件配置如何,都默认使用Client类型的JVM。* 如果是其他操作系统上,机器配置有2GB以上的内存同时有2个以上CPU的话默认使用server模式,否则使用client模式。
* 64位操作系统* 只有server类型,不支持client类型。

测试:

    [root@localhost test]# java -client -showversion TestJVMjava version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)wanyuan[root@localhost test]# java -server -showversion TestJVMjava version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)wanyuan# 由于机器是64位系统,所以不支持client模式

-X参数

jvm的-X参数是非标准参数,在不同版本的jvm中,参数可能会有所不同,可以通过java -X查看非标准参数。

英语特别牛的,请绕道

    [root@localhost ~]# java -X-Xmixed           mixed mode execution (default) # 混合模式执行-Xint             interpreted mode execution only # 仅解释模式执行# 用:分隔的目录和zip/jar文件-Xbootclasspath:<directories and zip/jar files separated by :> # 设置搜索路径引导类和资源set search path for bootstrap classes and resources# 用:分隔的目录和zip/jar文件-Xbootclasspath/a:<directories and zip/jar files separated by :># 附加在引导类路径末尾append to end of bootstrap class path# 用:分隔的目录和zip/jar文件-Xbootclasspath/p:<directories and zip/jar files separated by :># 置于引导类路径之前prepend in front of bootstrap class path# 显示附加诊断消息-Xdiag            show additional diagnostic messages# 禁用类垃圾收集-Xnoclassgc       disable class garbage collection# 启用增量垃圾收集-Xincgc           enable incremental garbage collection# 将GC状态记录在文件中,带时间戳-Xloggc:<file>    log GC status to a file with time stamps# 禁用后台编译-Xbatch           disable background compilation# 设置初始java堆大小-Xms<size>        set initial Java heap size# 设置最大java堆大小-Xmx<size>        set maximum Java heap size# 设置java线程堆栈大小-Xss<size>        set java thread stack size# 输出cpu配置文件数据-Xprof            output cpu profiling data# 启用最严格的检查,预期将来的默认值-Xfuture          enable strictest checks, anticipating future default# 减少java/VM对操作系统信号的使用(请参阅文档)-Xrs              reduce use of OS signals by Java/VM (see documentation)# 对jni函数执行其他检查-Xcheck:jni       perform additional checks for JNI functions# 不尝试使用共享类数据-Xshare:off       do not attempt to use shared class data# 在可能的情况下使用共享类数据(默认)-Xshare:auto      use shared class data if possible (default)# 要求使用共享类数据,否则将失效-Xshare:on        require using shared class data, otherwise fail.# 显示所有设置并继续-XshowSettings    show all settings and continue-XshowSettings:all# 显示所有设置并继续show all settings and continue# 显示所有与vm相关的设置并继续-XshowSettings:vm show all vm related settings and continue-XshowSettings:properties# 显示所有属性设置并继续show all property settings and continue-XshowSettings:locale# 显示所有与区域设置相关的设置并继续show all locale related settings and continue# -X 选项是非标准的选项,如有更改,恕不另行通知The -X options are non-standard and subject to change without notice.
-Xint、-Xcomp、-Xmixed参数
*  -Xint:在解释模式(interpreted mode)下,-Xint标记会强制JVM执行所有的字节码,当然这会降低运行速度,通常低10倍或更多。* -Xcomp编译模式:-Xcomp参数与它(-Xint)正好相反,JVM在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化。* 然而,很多应用在使用-Xcomp也会有一些性能损失,当然这比使用-Xint损失的少,原因是-xcomp没有让JVM启用JIT编译器的全部功能。JIT编译器可以对是否需要编译做判断,如果所有代码都进行编译的话,对于一些只执行一次的代码就没有意义了。* -Xmixed是混合模式,将解释模式与编译模式进行混合使用,由jvm自己决定,这是jvm默认的模式,也是推荐使用的模式。

示例:强制设置运行模式

    # 强制设置为解释模式   编译快,运行慢[root@localhost test]# java -showversion -Xint TestJVMjava version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, interpreted mode)wanyuan# 强制设置为编译模式  [root@localhost test]# java -showversion -Xcomp TestJVMjava version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, compiled mode)wanyuan# 注意:编译模式下,第一次执行速度会比解释模式下执行速度慢一些,需要注意观察。# 默认的混合模式[root@localhost test]# java -showversion TestJVMjava version "1.8.0_211"Java(TM) SE Runtime Environment (build 1.8.0_211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)wanyuan

-XX参数

-XX参数也是非标准参数,主要用于jvm的调优和debug操作。

-XX参数的使用有2种方式,一种是boolean类型,一种是非boolean类型:* boolean类型* 格式:-XX:[+-]<name>表示启用或者禁用<name>属性* 如:-XX:+DisableExplicitGC 表示禁用手动调用gc操作,也就是说调用System.gc()无效* 非boolean类型* 格式:-XX:<name>=<value>表示<name>属性的值为<value>* 如:-XX:NewRatio=1 表示新生代和老年代的比值

测试:

[root@localhost test]# java -showversion -XX:+DisableExplicitGC TestJVM
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)wanyuan

-Xms与-Xmx参数

  • -Xms与-Xmx分别是设置jvm的堆内存的初始大小和最大大小。
  • -Xmx2048m:等价于-XX:MaxHeapSize,设置JVM最大堆内存为2048M。
  • -Xms512m:等价于-XX:InitialHeapSize,设置JVM初始堆内存为512M。
  • 适当的调整jvm的内存大小,可以充分利用服务器资源,让程序跑的更快。
[root@localhost test]# java -Xms512m -Xmx2048m TestJVM
wanyuan

查看jvm的运行参数

有些时候需要查看jvm的运行参数,这个需求可能存在两种情况

  • 运行java命令时打印出运行参数
  • 查看正在运行的java进程的参数

运行java命令时打印出运行参数

java -XX:+PrintFlagsInitial -version这个命令的值很多,保存到文件中-XX:+PrintFlagsInitial -version > flag.txt

如:

[root@localhost test]# java -XX:+PrintFlagsInitial -version
#把他输出到一个文件
[root@localhost test]# java -XX:+PrintFlagsInitial -version > flags.txt

参数太多了,通过查看可以看出,参数有boolean类型和数字类型,值的操作是(= 默认值)或者(:= 被修改的值)

查看正在运行的java进程的参数

想要查看正在运行的jvm就需要借助jinfo命令查看

首先启动tomcat用于测试,观察下运行的jvm参数

rz # 上传
tar -xvf apache-tomcat-7.0.57.tar.gz # 解压
cd apache-tomcat-7.0.57
cd bin/
./startup.sh # 启动tomcat

jinfo命令

# 查看所有的参数,用法:jinfo -flags <进程id># 通过jps 或者jps -l 查看java进程id
[root@localhost bin]# jps
6346 Jps
6219 Bootstrap
[root@localhost bin]# jps -l
6346 sun.tools.jps.Jps
6219 org.apache.catalina.startup.Bootstrap[root@localhost bin]# jinfo -flags 6219
Attaching to process ID 6219, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.211-b12
Non-default VM flags: -XX:CICompilerCount=2 -XX:InitialHeapSize=31457280 -XX:MaxHeapSize=488636416 -XX:MaxNewSize=162529280 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=1572864 -XX:OldSize=29884416 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC # 查看某一个参数的值,用法:jinfo -flag <参数名> <进程id>
[root@localhost bin]# jinfo -flag MaxHeapSize 6219
-XX:MaxHeapSize=488636416

【JVM调优】JVM的运行参数相关推荐

  1. JVM调优的基本配置参数

    目录 Java中可以作为GC Roots的对象有哪些 JVM调优 JVM常用的基本配置参数有哪些 什么是GC Roots 因为确立垃圾的方法有引用记数法,但是会产生循环引用,所以引出了另一种方法叫可达 ...

  2. 文件上传服务器jvm调优,JVM性能调优解决方案(12页)-原创力文档

    精品文档 JVM性能调优解决方案(总结) 一.引言 本文的读者是技术支持人员.阅读本文后,你将理解 jboss 的启动脚本文件 (run.sh )中有一系列的 JVM配置参数的含义,以及如何调整它们, ...

  3. JVM 调优实战--常用命令参数及PS收集器的GC日志格式

    目录 了解JVM常用命令行参数 Parallel Scavenge(PS)的GC日志格式 了解JVM常用命令行参数 JVM的命令行参数参考:https://docs.oracle.com/javase ...

  4. 面试官:你会哪些JVM调优参数?

    关注公众号"Java后端技术全栈" 回复"000"获取程序员必备电子书 <Java 面试辅导>来啦!田哥和你面对面,一对一 规划如何准备面试.模拟真 ...

  5. 美团面试:熟悉哪些JVM调优参数,幸好我准备过!

    关注公众号"Java后端技术全栈" 回复"000"获取程序员必备电子书 大家好,我是田维常,江湖人称老田.田哥.田神,今天来和大家分享JVM调优参数. 之前,我 ...

  6. 手把手教你设置JVM调优参数

    关注"Java后端技术全栈" 回复"000"获取大量电子书 首先,还是一张思维导图,看看本文主要内容: 今天来熟悉一下,关于JVM调优常用的一些参数. X或者X ...

  7. 关于JVM调优的工具及JVM 常见调优参数

    六个命令行排查工具 我们一般使用 JDK 自带的 6 个命令行工具来排查JVM.它们分别是:jps.jstat.jinfo.jmap.jhat 和 jstack,它们都位于 JDK 的 bin 目录下 ...

  8. 【闲聊杂谈】一篇给你讲清楚JVM调优的本质

    1.什么是JVM JVM的定义 在说JVM之前,首先要知道什么是JVM.JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机, ...

  9. 【top2】JVM调优

    JVM调优 JVM调整FULL GC的执行效率,调整FULL GC的执行时间?GC垃圾回收机制: JVM可以分为两块区域,一块是线程共享区(所有线程共享的),一块分为线程私有区(每个线程都有的): 线 ...

  10. JVM调优:运行参数,内存模型,mat、jps、jstat、jmap、jstack、jvisualvm工具的使用

    JVM调优 - 工具篇 作者:张学亮 讲解内容 了解下我们为什么要学习JVM优化 掌握jvm的运行参数以及参数的设置 掌握jvm的内存模型(堆内存) 掌握jamp命令的使用以及通过MAT工具进行分析 ...

最新文章

  1. 操作系统学习笔记 第五章:文件管理(王道考研)
  2. 15.4.2:可变参数与泛型化方法
  3. 智能外呼系统相关资料总结
  4. 大屏数据可视化解决方案(上)
  5. 直接插入排序、冒泡排序实验详解【数据结构实验报告】
  6. 日志分析里面的max是什么_mysql慢日志文件分析处理
  7. C-从源文件到可执行文件的详细编译链接过程
  8. VARCHART XGantt适用于.NET v5.1 Build 337
  9. 字节跳动8年经验,亲身经历教你如何从小白晋升月薪过万的测试工程师
  10. 使用Unity3D编写ARPG游戏——角色属性的定义与实现(一)
  11. 计算机显示器有几个接口,电脑显示器的接口有几种?有哪些区别又要如何挑选呢?长知识了!...
  12. 推荐|微信朋友圈营销的新尝试
  13. 任务管理器 中mysqld.exe 所占内存过高
  14. 汽车区域控制器的关键技术和MCU解决方案深度分析
  15. 程序员笔试面试注意事项-1
  16. supersu-v2.8.2.zip_术业有专攻:ZIP文件操作模块zipfile
  17. 计算机安装重装出现错误,电脑重装系统老是失败要怎么办?我教你几个方法,一定能装上去!...
  18. Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)
  19. 【翻译1】Multivariate Time Series Forecasting with LSTMs in Keras——PM2.5
  20. 【SVM】支持向量机数学公式

热门文章

  1. 【转载】知乎答案----孙志岗----Google 发布了程序员养成指南,国内互联网巨头是否也有类似的指南和课程推荐...
  2. Ollydbg 中断方法浅探
  3. 银光甘特图/日历图/排程控件GTP.NET for Silverlight介绍及正版下载
  4. 给你十年时间你可以做到吗?
  5. myeclipse部署项目后,debug模式启动,总是弹出Class.class文件
  6. HTML table 标签的 frame 属性
  7. MainWindow 简介
  8. 1的个数 itoa函数使用
  9. muduo:高效整型转换为字符串
  10. shell实例第21讲:定时清空文件内容,定时记录文件大小