JVM 参数选项

名词解释

名词 解释
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]

  1. options - 选项
  2. classname - 执行的类名称
  3. filename - 执行的jar文件名称,只使用 -jar 选项时使用
  4. 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  也可以使用此选项。

上一篇:JS-BOM编程


下一篇:再谈BOM和DOM(7):HTML DOM Event 对象属性及DOM事件详细列表