用java命令启动Java程序,有两种方式: 在一般格式中: 例如: 在启动Java程序时,可以指定两类参数,分别叫做虚拟机选项(VM options)和程序参数(program arguments)。 虚拟机选项分为3类,分别是: 标准参数是指以-开头的参数。常见的标准参数如: JVM的类加载路径通过-classpath 使用-classpath后,JVM 将不再使用CLASSPATH中的类加载路径。(如果-classpath和CLASSPATH都没有设置,则JVM使用当前路径(.)作为类加载路径。) 系统属性参数以-D 关于标准参数更详细的说明可以参看这篇文章。 非标准参数又称为扩展参数,是指以-X开头的参数,可以通过java -X打印出所有的非标准参数。 非Stable参数是指以-XX开头的参数。 更详细的说明可以参看这篇文章。 用户自定义的参数。在代码中通过main()方法的String[] args获取后,用户在代码中按约定的格式对其进行解析,得到所需的参数值。 最终,我们来看一个包含各类参数的java启动命令:启动方式
java SomeClass 。 这里的SomeClass是main()方法所在的类。其一般格式为java [ options ] SomeClass[ arguments ]。java -jar SomeJar.jar。这里的SomeJar.jar是入口类所在的jar包。其一般格式为 java [ options ] -jar SomeJar.jar [ arguments ]。
java -Dfile.encoding=UTF-8 -Dusername=Joe Test hi a b c d
启动参数的类型
虚拟机选项是指由JVM支持、用于设置虚拟机启动过程的参数。
程序参数是指用户自定义的参数,在代码中可以通过main()方法的String[] args获取。虚拟机选项(VM options)
标准参数
类加载路径
-classpath "D:\Program Files\Java\jdk1.8.0_231\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\deploy.jar"
JVM 搜索类的方式和顺序为:
系统属性参数
多个系统属性参数之间用空格隔开。如果value中有空格,则需要用双引号将该值括起来,如-Dname=”space string”。
参数可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如-Dfile.encoding=UTF-8用于指定文件编码格式;
也可以是用户自定义的,例如-Dusername=Joe,程序中可以读取该参数值,执行相关逻辑。
如-Dspring.profiles.active=dev可以在SpringBoot启动中指定系统变量,用于多环境(开发、测试、预发、线上)的区分。非标准参数
常见的非标准参数如:
更详细的说明可以参看这篇文章。非Stable参数
这类参数在JVM中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了。
但这些参数中有些的确很有用,比如我们经常会见到的-XX:PermSize、-XX:MaxPermSize。
这些参数可以大致分成三类:
程序参数(program arguments)
java -jar -server -Xmx3550m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps
-Dserver.connection-timeout=60000 -Dspring.profiles.active=online SomeJar.jar argument1 argument2
原文