16、JVM运行时参数

本文详细介绍了JVM的三种参数类型:标准参数、-X参数和-XX参数,涵盖其特点、选项及作用。讨论了如何在不同场景下添加JVM参数,如在Eclipse、IDEA中,以及运行jar包和Tomcat时。讲解了常用的JVM内存设置,如堆、栈、方法区和直接内存,并提到了垃圾收集器的选择与调优,如Serial、ParNew、Parallel、CMS和G1。此外,还探讨了如何通过Java代码获取JVM参数。
摘要由CSDN通过智能技术生成

第1章、JVM参数选项

  • 官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

1、类型1:标准参数选项

【1】特点

  • 比较稳定,后续版本基本不会变化
  • 以-开头

【2】各种选项

  • 直接在DOS窗口中运行java或者java -help可以看到所有的标准选项
C:\Users\AlphonseKino>java
用法: 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>
                  使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html

【3】补充内容:-server与-client

  • Hotspot JVM有两种模式,分别是server和client,分别通过-server和-client模式设置

    • 32位系统上,默认使用Client类型的JVM。要想使用Server模式,机器配置至少有2个以上的CPU和2G以上的物理内存。client模式适用于对内存要求较小的桌面应用程序,默认使用Serial串行垃圾收集器

    • 64位系统上,只支持server模式的JVM,适用于需要大内存的应用程序,默认使用并行垃圾收集器

  • 官网地址:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

  • 如何知道系统默认使用的是那种模式呢?

    • 通过java -version命令:可以看到Server VM字样,代表当前系统使用是Server模式

      C:\Users\AlphonseKino>java -version
      java version "1.8.0_151"
      Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
      Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
      

2、类型2:-X参数选项

【1】特点

  • 非标准化参数
  • 功能还是比较稳定的。但官方说后续版本可能会变更
  • 以-X开头

【2】各种选项

  • 直接在DOS窗口中运行java -X命令可以看到所有的X选项
C:\Users\AlphonseKino123>java -X
    -Xmixed           混合模式执行 (默认)
    -Xint             仅解释模式执行
    -Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
                      设置搜索路径以引导类和资源
    -Xbootclasspath/a:<用 ; 分隔的目录和 zip/jar 文件>
                      附加在引导类路径末尾
    -Xbootclasspath/p:<用 ; 分隔的目录和 zip/jar 文件>
                      置于引导类路径之前
    -Xdiag            显示附加诊断消息
    -Xnoclassgc       禁用类垃圾收集
    -Xincgc           启用增量垃圾收集
    -Xloggc:<file>    将 GC 状态记录在文件中 (带时间戳)
    -Xbatch           禁用后台编译
    -Xms<size>        设置初始 Java 堆大小
    -Xmx<size>        设置最大 Java 堆大小
    -Xss<size>        设置 Java 线程堆栈大小
    -Xprof            输出 cpu 配置文件数据
    -Xfuture          启用最严格的检查, 预期将来的默认值
    -Xrs              减少 Java/VM 对操作系统信号的使用 (请参阅文档)
    -Xcheck:jni       对 JNI 函数执行其他检查
    -Xshare:off       不尝试使用共享类数据
    -Xshare:auto      在可能的情况下使用共享类数据 (默认)
    -Xshare:on        要求使用共享类数据, 否则将失败。
    -XshowSettings    显示所有设置并继续
    -XshowSettings:all
                      显示所有设置并继续
    -XshowSettings:vm 显示所有与 vm 相关的设置并继续
    -XshowSettings:properties
                      显示所有属性设置并继续
    -XshowSettings:locale
                      显示所有与区域设置相关的设置并继续

-X 选项是非标准选项, 如有更改, 恕不另行通知

【3】JVM的JIT编译模式相关的选项

  • -Xint

    • 只使用解释器:所有字节码都被解释执行,这个模式的速度是很慢的
  • -Xcomp

    • 只使用编译器:所有字节码第一次使用就被编译成本地代码,然后在执行
  • -Xmixed

    • 混合模式:这是默认模式,刚开始的时候使用解释器慢慢解释执行,后来让JIT即时编译器根据程序运行的情况,有选择地将某些热点代码提前编译并缓存在本地,在执行的时候效率就非常高了
  • 查看本机使用的JIT模式

    • mixed mode:所以本机使用的是混合模式
    C:\Users\AlphonseKino>java -version
    java version "1.8.0_151"
    Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
    

【4】注意事项

  • -Xmx -Xms -Xss属于什么参数?单位:k/K、m/M、g/G

    • -Xms :设置初始Java堆大小,等价于-XX:InitialHeapSize

      • 查看该参数值的时候,应该使用InitialHeapSize
      • 例:jinfo flag InitialHeapSize 进程id

      在这里插入图片描述

      在这里插入图片描述

    • -Xmx :设置最大Java堆大小,等价于-XX:MaxHeapSize

      • 查看该参数值的时候,应该使用MaxHeapSize
      • 例:jinfo flag InitialHeapSize 进程id

      在这里插入图片描述

    • -Xss : 设置Java线程堆栈大小,等价于-XX:ThreadStackSize

      • 查看该参数值的时候,应该使用ThreadStackSize
      • 例:jinfo flag InitialHeapSize 进程id
  • 注意:设置:-Xmx、-Xms最好设置成一样的值,避免扩容带来的损耗

3、类型3:-XX参数选项

【1】特点与作用

  • 特点:
    • 非标准化参数
    • 使用的最多的参数类型
    • 这类选项属于实验性,不稳定
    • 以-XX开头
  • 作用:用于开发和调试JVM

【2】分类

  • Boolean类型格式
    • -XX:+:表示启用option属性
    • -XX:-:表示禁用option属性
    • 说明:因为有的指令默认是开启的,所以可以使用-关闭
    • 例如:
      • -XX:+UseParallelGC:选择垃圾收集器为并行收集器
      • -XX:+UseG1GC:表示启用G1收集器
      • -XX:+UseAdaptiveSizePolicy:自动选择年轻代区大小和相应的Survivor区比例
  • 非Boolean类型格式(key-value类型)
    • 子类型1:数值型格式:-XX:=
      • number表示数值,number可以带上单位,比如: m’、M表示兆,k、K表示Kb,g、G表示g(例如32k跟32768是一样的效果)
      • 例如:
        • -XX:NewSize=1024m:表示设置新生代初始大小为1024兆
        • -XX:MaxGCPauseMillis=500:表示设置GC停顿时间为500毫秒
        • -XX:GCTimeRatio=19:表示设置吞吐量
        • -XX:NewRatio=2:表示新生代与老年代的比例
    • 子类型2:非数值型格式:-XX:=
      • -XX:HeapDumpPath=/usr/local/heapdump. hprof:用来指定heap转存文件的存储路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值