微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM 参数选项

名词解释

名词解释
JVM虚拟机,Java Virtual Machine 
JDKJava SE Development Kit
JARJava 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 )

jvmtiJVM(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  也可以使用此选项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐