java程序通过
java -option
启动,其中java程序为jdk安装目录下bin
文件夹中的java
可执行程序,-option
为虚拟机参数。
java
运行参数分为三大类
- 基本参数:
-
所有虚拟机都需要具备的功能,并且向后兼容 - 非标准参数:
-X
默认jvm都实现这些功能但是不保证所有的jvm都能满足,且不保证向后兼容 - 非Stable参数:
-XX
不稳定参数,各个jvm实现会不相同,未来随时会取消。慎重使用
标准参数
参数 | 描述 | |
---|---|---|
-client | 设置虚拟机使用client模式启动,运行速度快,但是性能和内存管理效率不如server。 | |
-server | 设置虚拟机使用server模式启动,64位下默认启动,忽略-client | |
-classpath或-cp | 告知虚拟机搜索的目录、jar文件、zip文档名,用; 隔开。注1 |
|
-D<propertyName>=value | 在虚拟机系统属性中设置属性名/值的键值对,可在运行时System.getProperty("propertyName") 获取值,有空格需要使用双引号-Dname="space string" |
|
-verbose/-verbose:class | 输出虚拟机装入的类的信息,显示格式注2 | |
-verbose:gc | 虚拟机内存回收时在输出设备显示信息,格式注3 | |
-verbose:jni | 虚拟机调用native方法时输出信息,格式注4 | |
-version | 显示可运行虚拟机版本信息然后退出 | |
-showversion | 显示产品版本并继续 | |
-ea | 开启断言,同下 | |
-enableassertions[:<packagename>... | :<classname>] | 开启指定目录和类的断言 |
-da/disableassertions | 关闭断言,其它同上 | |
-esa/enablesystemassertions | 设置虚拟机显示系统类的断言 | |
-dsa/disablesystemassertions | 关闭系统类的断言 | |
-agentlib:<libname>[=<options>] | 虚拟机装载本地代理库,参数未name=xx=1,yy=2这样的格式。windows下找libname.dll,unix下找libname.so文件。搜索路径不同系统不一样。注5 | |
-agentpath:<pathname>[=<options>] | 设置虚拟机本地库路径,其它和上面一样 | |
-javaagent:<pathname>[=<options>] | 设置启动时装入java语言的设备代理,注6 |
注:
-
-classpath
:虚拟机在运行一个类时,需要将其装入内存虚拟机搜索的顺序为Bootstrap classes
-Extension classes
-User classes
。其中
1. `Bootstrap classes`是虚拟机自带的 `jar`或者`zip`文件,虚拟机搜索这些包的文件,使用`System.getProperty("sun.boot.class.path")`可以得到虚拟机所搜的包名。
2. `Extension classes`是位于`jre` `lib` `ext`下的jar文件,使用`System.getProperty("java.ext.dirs")`可获得`Extension`搜索路径
3. `User classes`搜索的顺序为当前目录,环境变量CLASSPATH、-classpath
使用`-classpath`后虚拟机不再使用环境变量`CLASSPATH`作为搜索路径。
-
-verbose:class
:展示类信息为:
[Loaded java.io.FilePermission$1 from shared objects file]
当虚拟机报告类找不到或类冲突时可用此参数来诊断来查看虚拟机从装入类的情况
-
-verbose:gc
:显示gc格式如下
[Full GC 268K->168K(1984K), 0.0187390 secs]
该参数用来监视虚拟机内存回收的情况。
-
-verbose:jni
:显示jvm调用native
方法时输出信息格式
[Dynamic-linking native method HelloNative.sum ... JNI]
该参数用来监视虚拟机调用本地方法的情况,在发生jni错误时可为诊断提供便利。
-
-agentlib:<libname>[=<options>]
:
例如可使用-agentlib:hprof来获取虚拟机的运行情况,包括CPU、内存、线程等的运行数据,并可输出到指定文件中,可用-agentlib:hprof=help来得到使用帮助列表。在jre"bin目录下可发现hprof.dll文件。
-
-javaagent:<jarpath>[=<options>]
:
虚拟机启动时装入java语言设备代理。Jarpath文件中的mainfest 文件必须有Agent-Class属性。代理类要实现public static void premain(String agentArgs, Instrumentation inst)方法。当虚拟机初始化时,将按代理类的说明顺序调用premain方法。