zoukankan      html  css  js  c++  java
  • Java 启动参数

    启动方式

    java命令启动Java程序,有两种方式:

    • 通过指定入口类:java SomeClass。这里的SomeClassmain()方法所在的类。其一般格式为java [ options ] SomeClass[ arguments ]
    • 指定入口类所在jar包:java -jar SomeJar.jar。这里的SomeJar.jar是入口类所在的jar包。其一般格式为java [ options ] -jar SomeJar.jar [ arguments ]

    在一般格式中:

    • [ options ]:配置 Java 的虚拟机选项(或称 系统参数)
    • [ arguments ]:配置 Java 程序参数(或称 运行参数)
      例如:java -Dfile.encoding=UTF-8 -Dusername=Joe Test hi a b c d

    启动参数的类型

    在启动Java程序时,可以指定两类参数,分别叫做虚拟机选项(VM options)和程序参数(program arguments)。
    虚拟机选项是指由JVM支持、用于设置虚拟机启动过程的参数。
    程序参数是指用户自定义的参数,在代码中可以通过main()方法的String[] args获取。

    虚拟机选项(VM options)

    虚拟机选项分为3类,分别是:

    • 标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容。
    • 非标准参数(-X):默认JVM实现这些参数的功能,但是并不保证所有JVM实现都满足,且不保证向后兼容。
    • 非Stable参数(-XX):此类参数各个JVM实现会有所不同,将来可能会随时取消,需要慎重使用。

    标准参数

    标准参数是指以-开头的参数。常见的标准参数如:

    • -client / -server: 指定虚拟机以client模式(Windows下的默认模式)还是server模式(Linux下的默认模式)启动。
    • -jar:指定以jar包的形式执行一个应用程序。要这样执行一个应用程序,必须让jar包的manifest文件中声明初始加载的Main-class,该类中必须有public static void main(String[] args)方法。
    • -verbose 或 -verbose:class:输出JVM载入类的相关信息,当JVM报告说找不到类或者类冲突时可此进行诊断。
    • -verbose:gc:输出每次GC的相关情况。
    • -verbose:jni:输出native方法调用的相关情况,一般用于诊断jni调用错误信息。
    • -X:输出非标准的参数列表及其描述。
    • -? 或 -help:输出java标准参数列表及其描述。
    • -version:输出java的版本信息,比如jdk版本、vendor、model。
    • -javaagent:jarpath[=options]:指定jvm启动时装入java语言设备代理。Jarpath文件中的mainfest文件必须有Agent-Class属性,代理类必须实现方法public static void premain(String agentArgs, Instrumentation inst)(和main方法类似)。当JVM初始化时,将按代理类的说明顺序调用premain方法。具体参见java.lang.instrument软件包的描述。
    • -enableassertions[:"..." | : ] 或 -ea[:"..." | : ]:用来设置JVM是否启动断言机制(从JDK 1.4开始支持),缺省时JVM关闭断言机制。
    • -disableassertions[:"..." | :<class ; ] 或 -da[:"..." | : ]:用来设置JVM关闭断言处理,一般用于相同package内某些class不需要断言的场景。
    • -enablesystemassertions 或 -esa:激活系统类的断言。
    • -disablesystemassertions 或 -dsa:关闭系统类的断言。

    类加载路径

    JVM的类加载路径通过-classpath <classpath>-cp <classpath>指定,多个路径之间用分号分隔,如:

    -classpath "D:Program FilesJavajdk1.8.0_231jrelibcharsets.jar;D:Program FilesJavajdk1.8.0_231jrelibdeploy.jar"
    

    使用-classpath后,JVM 将不再使用CLASSPATH中的类加载路径。(如果-classpathCLASSPATH都没有设置,则JVM使用当前路径(.)作为类加载路径。)
    JVM 搜索类的方式和顺序为:

    1. Bootstrap:Bootstrap中的路径是JVM自带的jar或zip文件,JVM首先搜索这些包文件,用System.getProperty("sun.boot.class.path")可得到其值。
    2. Extension:Extension是位于JRE_HOME/lib/ext目录下的jar文件,JVM在搜索完Bootstrap后就搜索该目录下的jar文件,用System.getProperty("java.ext.dirs")可得到其值。
    3. User:User搜索顺序为当前路径、CLASSPATH-classpath。用System.getProperty("java.class.path")可得到其值。

    在标准参数中,有一类以-D开头定义的参数,叫做系统属性参数,用于在虚拟机的系统属性中设置属性名/值对。

    系统属性参数

    系统属性参数以-D<propertyName>=value形式定义,运行在此虚拟机之上的应用程序可用System.getProperty("propertyName")得到value的值。
    多个系统属性参数之间用空格隔开。如果value中有空格,则需要用双引号将该值括起来,如-Dname=”space string”。
    参数可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如-Dfile.encoding=UTF-8用于指定文件编码格式;
    也可以是用户自定义的,例如-Dusername=Joe,程序中可以读取该参数值,执行相关逻辑。
    -Dspring.profiles.active=dev可以在SpringBoot启动中指定系统变量,用于多环境(开发、测试、预发、线上)的区分。

    关于标准参数更详细的说明可以参看这篇文章

    非标准参数

    非标准参数又称为扩展参数,是指以-X开头的参数,可以通过java -X打印出所有的非标准参数。
    常见的非标准参数如:

    • -Xms:指定JVM堆的初始大小(memory of start?),如-Xms3550m
    • -Xmx:指定JVM堆的最大值(memory of maximum?),如-Xmx3550m
    • -Xmn:指定JVM堆中新生代的大小(memory of nursery),如-Xmn2g
    • -Xss:设置单个线程栈的大小(stack size),一般默认为512k。等同于-XX:NewSize
    • -Xprof:跟踪正运行的程序,并将跟踪数据在标准输出输出;适合于开发环境调试。
    • -Xloggc::与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中。若与verbose命令同时出现在命令行中,则以-Xloggc为准。
    • -Xint:设置JVM以解释模式运行,所有的字节码将被直接执行,而不会编译成本地码。
      更详细的说明可以参看这篇文章

    非Stable参数

    非Stable参数是指以-XX开头的参数。
    这类参数在JVM中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了。
    但这些参数中有些的确很有用,比如我们经常会见到的-XX:PermSize-XX:MaxPermSize
    这些参数可以大致分成三类:

    • 行为参数(Behavioral Options):用于改变jvm的一些基础行为
    • 性能调优(Performance Tuning):用于jvm的性能调优
    • 调试参数(Debugging Options):一般用于打开跟踪、打印、输出等jvm参数,用于显示jvm更加详细的信息
      更详细的说明可以参看这篇文章

    程序参数(program arguments)

    用户自定义的参数。在代码中通过main()方法的String[] args获取后,用户在代码中按约定的格式对其进行解析,得到所需的参数值。

    最终,我们来看一个包含各类参数的java启动命令:

    java -jar -server -Xmx3550m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
    -Dserver.connection-timeout=60000 -Dspring.profiles.active=online SomeJar.jar argument1 argument2
    

    参考文档:

    1. java: Launches a Java application - Oracle官方文档
    2. java启动参数一【博客园】
    3. java -jar 启动参数【CSDN】
    4. Java 设置系统参数和运行参数【CSDN】
    5. java程序启动参数-D详解【CSDN】
    6. JAVA启动参数三:非Stable参数
  • 相关阅读:
    spring data jpa序列化问题
    观察者模式(bilibili)
    观察者模式之Spring: event和listener
    观察者模式之Observer和Subject
    Mybatis Plus官网
    Hackinglab之注入关
    利用GitHub进行团队开发
    IIS安装Web时数据库参数配置文件写入权限验证失败
    流量分析基础篇
    Mysql启动错误1045(28000)
  • 原文地址:https://www.cnblogs.com/haycheng/p/12781261.html
Copyright © 2011-2022 走看看