名词解释
名词 | 解释 |
---|---|
JVM | 虚拟机,Java Virtual Machine |
JDK | Java SE Development Kit |
JAR | Java Archive |
JDWP | 断点调试侦听协议,Java Debug Wire Protocol |
JVMTI | 虚拟机工具接口,JVM Tools Interface |
CDS | 类数据共享,class data sharing |
JFR | 飞行记录,Java Flight Recorder |
HPROF | 堆转储工具,heap profiler |
语法
java [options] classname [args]
java [options] -jar filename [args]
- options - 选项
- classname - 执行的类名称
- filename - 执行的jar文件名称,只使用 -jar 选项时使用
- args - 使用空格分隔多个参数,并传递给运行的main方法
options
1、标准选项 Standard Options
标准选项:市面上所有虚拟机都支持的最常用选项。一般以 '-' 开头。
-help
-?
显示可用的option信息
-agentlib:libname[=options]
加载原生(Native)代理类库。
libname: native类库名称
options: 传递给类库的参数;以逗号','分隔多个参数
如 -agentlib:foo
,虚拟机会加载 libfoo.so 名称的类型,类库位置位于环境变量 LD_LIBRARY_PATH (OS X系统环境变量是 DYLD_LIBRARY_PATH )指向的目录。
示例1,加载“堆分析工具(hprof)库”,间隔20ms一次采样CPU信息,跟踪3层栈深:
-agentlib:hprof=cpu=samples,interval=20,depth=3
示例2,加载 JDWP(Java Debug Wire Protocol) 断点调试侦听协议库,并监听8080端口:
-agentlib:jdwp=transport=dt_socket,server=y,address=8000
更多原生代理类库,参考链接:
java.lang.instrument: java.lang.instrument (Java Platform SE 8 )
jvmti: JVM(TM) Tool Interface 1.2.3
-agentpath:pathname[=options]
和上面的 -agentlib:libname[=options] 选项功能相同
pathname: 原生代理类库全路径名
-client
采用Client VM运行程序。64位JDK会忽略,并使用Server VM替换此选项。
默认选项,查看链接 http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html
-server
采用Server VM运行程序。只有64位JDK支持 Server VM,会自动使用 -server 选项。
-d32
以32位JDK运行程序。如果未安装或不支持32位JDK将会报错。如果未安装64位JDK,默认使用32位JDK。
-d64
以64位JDK运行程序。如果未安装或不支持64位JDK将会报错。如果未安装64位JDK,默认使用32位JDK。
目前只有64位JDK支持 Server VM,使用了 -server 选项则默认使用 -d64 选项;使用了 -client 选项则会忽略 -d64 选项。
-Dproperty=value
使用 -D 来设置系统属性。
property: 属性名称,不带空格的字符串
value: 属性值,如果属性值中有空格,使用引号括起来。如(-Dfoo="foo bar")
-disableassertions[:[packagename]...|:classname]
-da[:[packagename]...|:classname]
禁用断言(assertions)。默认禁用所有包和类的断言。-da 是 -disableassertions的缩写。
如果不设置 packagename 参数将禁用所有包的断言,但不禁用系统类(这个特性可以很容易禁用除系统类之外的所有类的断言);如果设置了 packagename 参数,并且以 ... 结尾,禁用包及其所有子包的断言;如果 packagename 参数设置成 ... ,禁用当前工作目录下没有包的所有类的断言;如果设置了 classname 参数,禁用这个类的断言。
该选项适用于所有类加载器和系统类(没有类加载器的类。这里的system classes文档上说没有类加载器,无法理解,有没有大神能给指点指点,不胜感激!)。
示例:
java -da:com.wombat.fruitbat.Brickbat MyClass
-disablesystemassertions
-dsa
禁用所有系统类的断言。
-enableassertions[:[packagename]...|:classname]
-ea[:[packagename]...|:classname]
启用断言。默认禁用所有包和类的断言。-ea 是 -enableassertions 的缩写,与 -da 选项功能相反。
如果不设置 packagename 参数将启用所有包的断言,但不启用系统类(这个特性可以很容易启用除系统类之外的所有类的断言);如果设置了 packagename 参数,并且以 ... 结尾,启用包及其所有子包的断言;如果 packagename 参数设置成 ... ,启用当前工作目录下没有包的所有类的断言;如果设置了 classname 参数,启用这个类的断言。
该选项适用于所有类加载器和系统类(没有类加载器的类)。
示例:
java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass
-enablesystemassertions
-esa
启用所有系统类的断言。与 -dsa 选项功能相反。
-jar filename
执行 jar 文件。
filename: jar 文件名称,jar 包中的 manifest 文件内容中含有一行带 main 函数的可执行类: Main-Class:classname
当使用 -jar 选项,JAR 文件是所有用户类的来源,其它类路径将被忽略。
jar命令使用手册:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jar.html
http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html
http://docs.oracle.com/javase/tutorial/deployment/jar/index.html
-javaagent:jarpath[=options]
探针技术( java.lang.instrument)
更多信息:java.lang.instrument (Java Platform SE 8 )
-jre-restrict-search
将用户私有JREs纳入version search
-no-jre-restrict-search
将用户私有JREs剔除version search
-showversion
显示版本信息并继续执行程序。
-version
显示版本信息并退出程序。
-version:release
指定版本运行程序。如果运行程序的 java 命令版本不匹配,但是系统中有匹配的其它 java 命令,则使用匹配的 java 命令来运行程序。
release: 版本号,使用空格分隔多个版本号或者版本区间范围。当有空格时使用引号(")括起来。
示例:-version:"1.6.0_13 1.6* & 1.6.0_10+"
*: 通配
+: 大于当前设定的版本
: 空格,逻辑或
&: 逻辑与(并且)
-splash:imgname
设置启动画面。
示例:-splash:images/splash.gif
-verbose:class
显示每个类加载信息
-verbose:gc
显示每一次GC信息
-verbose:jni
显示原生方法的使用和其它JNI的活动信息。
2、非标准选项 Non-Standard Options
非标准选项是HotSpot VM的通用选项。其它 JVM 不一定需要实现或者实现功能不一定相同。一般以 -X 开头。
-X
显示非标准选项的帮助信息。
非标选项内容较多,慢慢完善。未完待续……
3、高级运行时选项 Advanced Runtime Options
4、高级即时编译选项 Advanced JIT Compiler Options
5、高级可维护性选项 Advanced Serviceability Options
这些选项用来收集系统信息和运行调试。
-XX:+ExtendedDTraceProbes
启用 dtrace 探针,这个选项会影响性能。默认禁用,只使用标准探针。
-XX:+HeapDumpOnOutOfMemoryError
发生OOM时使用HPROF工具转储堆到当前目录。默认禁用选项,不转储堆。
-XX:HeapDumpPath=path
设置堆转储路径。默认转储文件保存在当前目录,命名格式为:java_pidpid.hprof(pid是进程ID)。
示例:
-XX:HeapDumpPath=./java_pid%p.hprof
-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
-XX:LogFile=path
设置日志文件路径。默认在当前目录中创建名称为 hotspot.log 的日志文件。
示例:-XX:LogFile=/var/log/java/hotspot.log
-XX:+PrintClassHistogram
在按下“Ctrl + C”,触发事件(SIGTERM)后打印类实例直方图,默认禁用选项。
相当于运行命令 “jmap -histo”或者“jcmd pid(进程id) GC.class_histogram”
-XX:+PrintConcurrentLocks
在按下“Ctrl + C”,触发事件(SIGTERM)后打印 java.util.concurrent 中的锁信息。默认禁用选项。
相当于运行命令“jstack -l”或者“jcmd pid(进程id) Thread.print -l”
-XX:+UnlockDiagnosticVMOptions
解锁诊断JVM的选项。默认禁用,诊断选项不可用。
6、高级垃圾回收选项 Advanced Garbage Collection Options
这些选项用于控制虚拟机如何进行垃圾回收。
-XX:ActiveProcessorCount=x
虚拟机用于计算线程池的CPU数量。线程池用于各种操作,如:GC垃圾回收和ForkJoinPool。
虚拟机决定使用处理器数量取决于操作系统。在docker容器中运行多个java进程时划分CPU资源非常有用。即使未启用容器支持选项 UseContainerSupport 也可以使用此选项。