1. java启动命令
运行一个java应用程序的语法分两种,分别为:
执行类:java [-options] class [args…]
执行jar文件:java [-options] -jar jarfile [args…]
其中 [-options] 配置 JVM参数,[args…] 配置 Java 运行参数
2. 运行时参数
其中args为运行时参数,即main方法中的参数数组args,可以通过修改启动配置进行设置,以idea为例,如图这里设置了3个参数,每个参数之间用空格分隔,如果参数自身带有空格,则需要用引号包裹。
3. JVM参数
标准参数
标准参数,顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。
我们可以通过 -help 命令来检索出所有标准参数。
预定义的标准参数(非-D开头的选项)的个数是有限的,。但是我们还可以自定义设置系统属性,其标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。
我们在设置VM参数时不能随意设置,要么使用-Dargname=argvalue这种形式,要么使用预定义的标准参数,如-javaagent:xxxx,以及-classpath xxxx
其中,参数名可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8 用于指定文件编码格式;也可以是用户自定义的,例如,-Dmy=user,程序中可以读取该参数值,执行相关逻辑。
虚拟机系统参数中设置的参数键值对(只有-D定义的系统属性是键值对形式),在程序中可以用 System.getProperty(“propertyName”) 获取对应参数值。
/**
* VM Args:-Dmy=user
*
* @author moonspirit
* @version 1.0
*/
public class VMargs {
public static void main(String[] args) {
String result = System.getProperty("my");
System.out.println("my: " + result);
}
}
输出结果:
关于System.getProperty(“propertyName”)可参考另一文章
参考文章:https://www.cnblogs.com/ysocean/p/11109018.html
非标准参数(-X以及-XX)
X参数
对应前面讲的标准化参数,这是非标准化参数。表示在将来的JVM版本中可能会发生改变,但是这类以 -X开始的参数变化的比较小。
我们可以通过 Java -X 命令来检索所有-X 参数。
XX参数
这是我们日常开发中接触到最多的参数类型。这也是非标准化参数,相对来说不稳定,随着JVM版本的变化可能会发生变化,主要用于JVM调优和debug。
注意:这种参数是我们后续介绍JVM调优讲解最多的参数。
该参数的书写形式又分为两大类:
①、Boolean类型
格式:-XX:[±] 表示启用或者禁用name属性。
例子:-XX:+UseG1GC(表示启用G1垃圾收集器)
②、Key-Value类型
格式:-XX:= 表示name的属性值为value。
例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿时间是500ms)
demo
这是一个java程序启动时的启动参数信息,在格式上进行了一下分割
运行配置如下图
有些vm参数是idea在启动时的默认配置
这里暂不介绍各参数用法,留待以后归纳