暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

JVM启动参数总结

码上记录 2021-09-15
1775

JVM启动参数分为三类。

一类是标准参数: 即 - 符号后面接的参数。所有JVM的实现都必须实现这些参数的功能,而且向后兼容。


一类是非标准参数或者叫扩展参数: 即 -X 符号后面接的参数。默认JVM实现这些参数的功能,但是并不保证所有JVM实现都满足,而且不保证向后兼容。


还有一类是不稳定参数:即 -XX 符号后面接的参数。这类参数各个JVM实现会有所不同,将来可能会随时取消,需要谨慎使用。


整理了一下重要的启动参数列表。


标准参数列表


参数名含义
-client设置JVM使用client模式
-server设置JVM使server模式
-agentlib:libname[=options]用于装载本地lib包; 中libname为本地代理库文件名,
默认搜索路径为环境变量PATH中的路径
-agentpath:pathname[=options]按全路径装载本地库,不再搜索PATH中的路径
-classpath classpath告知JVM搜索目录名、jar文档名、zip文档名,之间用分号;分隔
-Dproperty=value设置系统属性名/值对,运行在此jvm之上的应用程序
可用System.getProperty("property")得到value的值。
-jar指定以jar包的形式执行一个应用程序。
-verbose输出JVM的信息,可以在后面添加 class  gc  jni输出详细信息


扩展参数列表


参数名含义
-Xloggc:file将每次GC事件的相关情况记录到一个文件中
-Xmn新生代大小
-Xss每个线程的栈大小
-Xms初始堆大小
-Xmx堆内存的最大值
-Xprof跟踪正运行的程序,并将跟踪数据在标准输出输出;
适合于开发环境调试。


不稳定参数列表


参数名含义
NewSize初始新生代值
MaxNewSize最大新生代值
NewRatio老年代和新生代的比值
SurvivorRatioEden区和两个Survivor区的比值
PermSize初始方法区的值
MaxPermSize最大方法区的值
MaxDirectMemorySize最大直接内存的值
MaxTenuringThreshold新生代对象进入老年代的最大年龄
PrintVMOptions打印显式参数
PrintCommandLineFlags打印显式隐式参数
PrintFlagsFinal打印所有系统参数


JVM有很多非稳定参数,上面列出的只是一小部分。想要查看所有非稳定参数,可以参考怎么查看JVM的参数?这篇文章的内容。


根据这篇文章中的内容, 我们可以运行

    java -XX:+PrintFlagsFinal >  jvm_flag_final.txt


    把所有非稳定参数都导入到 jvm_flag_final.txt 中,如下图所示。



    分析这个文件,它实际是一个5列的表格。


    这5列分别是 Type | Name | Operator | Value | Application。


    Type 表示这个参数的类型,类型表示这个参数可以被赋予的值。


      //运行下面的shell命令,可以输出不重复的类型值
      cat jvm_flag_final.txt | awk '{if (NR!=1) {print $1}}' | sort | uniq


      bool
      ccstr
      ccstrlist
      double
      intx
      uint64_t
      uintx


      Name 表示参数名,在jvm_flag_final.txt 中总共有727个参数。


      Operator 有两种,= 表示默认值,:= 意味着值是被修改的。


      Value 表示参数的值。


      Application表示参数适用范围。


        \\运行下面的shell命令,可以输出不重复的Application值,加上注释,方便查看含义
        cat jvm_flag_final.txt | awk -F '\\{' '{if(NR!=1) {print "\{"$2}}' | sort | uniq


        {ARCH product}
        {C1 pd product}
        {C1 product}
        {C2 pd product}
        {C2 product}
        {lp64_product}
        {manageable}
        {pd product}
        {product rw}
        {product} 


        Application用复合标识符来表示参数适用的范围,下面解释一下单个参数的含义。

        • product  官方支持, JVM内部选项

        • rw  可动态写入的

        • C1 Client JIT 编译器

        • C2 Server JIT 编译器

        • pd platform Dependent 平台独立

        • lp64  仅 64 位JVM

        • manageable  外部定义的并且是可动态写入的


        具体Application值的含义,可以查看这个文件 

        http://hg.openjdk.java.net/jdk6/jdk6/hotspot/file/tip/src/share/vm/runtime/globals.hpp


        参考文档:

        1 JVM启动参数大全  https://www.cnblogs.com/jpfss/p/12237079.html


        2 [翻译]Java -XX:+PrintFlagsFinal命令行参数详解 


        https://emacsist.github.io/2016/01/11/%E7%BF%BB%E8%AF%91java-xx-printflagsfinal%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E8%AF%A6%E8%A7%A3/ 

        文章转载自码上记录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论