java高*之JVM命令参数大全(标准选项)

时间:2021-10-01 17:15:51

java高*之JVM命令参数大全(标准选项)

这里的选项是被所有的虚拟机实现的选项。

  • -agentlib:libname[=options]

加载指定的本地代理库,在库名称之后是用逗号分开的选项,这些选项用来指定那些库可用。

如果-agentlib:foo 这样设置,那么JVM会尝试去加载foo.dll,这个库文件应该在环境变量Path指定的目录下。

下面的例子展示了怎样加载堆分析工具(HPROF)库,每20毫秒获得一次CPU信息,栈深度是3.

    -agentlib:hprof=cpu=samples,interval=20,depth=3

下面的例子展示了怎样加载java调试连线协议(JDWP),监听8000端口,在加载main类之前挂起JVM。

    -agentlib:jdwp=transport=dt_socket,server=y,address=8000

更多的信息请查看下面的地址:

java.lang.instrument 包: http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html
代理命令行选项:
http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting

  • -agentpath:pathname[=options]

加载本地代理库,通过制定一个绝对目录开实现,这个选项和-agentlib相似。不同之处在于指定的是全路径和文件名。

  • -client

选择java hotspot 客户端模式,64位版本的JDK已经忽略的此设置,使用服务器模式代替。

默认虚拟机模式,请看下面的地址:
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

  • -Dproperty=value

设置系统属性值,property表示系统变量的名称,value代表变量的值,如果value中间有空格,那么value需要使用引号括起来(比如: -Dfoo=”foo bar”).

  • -disableassertions[:[packagename]…|:classname] -da[:[packagename]…|:classname]

使断言失效,默认断言在所有的类中是失效的。

如果没有参数,那么所有的包和类中取消断言。

如果有报名作为参数,且以…结尾,那么在指定的包和子包中去掉断言。如果参数仅仅是…那么表示没有包的类中断言失效。如果是类名做参数,那么就是指定的类中不能使用断言。

-disableassertions (-da)选项适用于所有的类加载器和系统类。有一个例外:如果这个选项没有参数,那么它就不适用于系统类。这就使得取消除系统类之外的类的断言变的简单,

-disablesystemassertions可以使得所有系统类中的断言失效。

可以明确的指出哪些类中可以使用断言,这时就要使用:-enableassertions (-ea)。这两个选项可以同时使用。比如,运行MyClass类 com.wombat.fruitbat包和子包中的类使用断言。

但是类com.wombat.fruitbat.Brickbat取消断言:

java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass

-disablesystemassertions -dsa

取消所有的系统类断言。

  • -enableassertions[:[packagename]…|:classname] -ea[:[packagename]…|:classname]

使断言生效,默认断言在所有的类中是失效的。

如果没有参数,则使所有包和类中的断言生效。

如果包名作为参数,且以…结尾,那么在指定的包和子包中断言 生效。

如果参数仅仅是…那么表示没有包的类中断言生效。

如果是类名做参数,那么就是指定的类中断言生效。

-enableassertions (-ea)选项适用于所有的类加载器和系统类。有一个例外:如果这个选项没有参数,那么它就不适用于系统类。这就使得生效除系统类之外的类的断言变的简单,

-enableassertions可以使得所有系统类中的断言生效。

可以明确的指出哪些类中不可可以使用断言,这时就要使用:-disableassertions (-da)。这两个选项可以同时使用。比如,运行MyClass类 com.wombat.fruitbat包和子包中的类使用断言。

但是类com.wombat.fruitbat.Brickbat取消断言:

java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyClass

-enablesystemassertions -esa

使所有系统类中的断言生效。

  • -help -?

查看java命令可用的选项,不会启动JVM。

  • -jar filename

执行jar包中的程序,filename就是jar包的名称,jar包中有mf文件中指定了主类Main-Class:classname。主类中有 public static void main(String [] args)方法作为开始执行的地方。

当使用-jar选项时,jar包就是所有类的源,其他指定的类路径将会被忽略。

更多的信息,查看下面的地址:

http://docs.oracle.com/javase/8/docs/technotes/tools/windows/jar.html#BGBEJEEG

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]

加载特定的代理程序,更多的信息查看下面地址:
http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html

  • -jre-restrict-search

版本搜索时包括用户私有的jre。

  • -no-jre-restrict-search

版本搜索时不包括用户私有的jre。

  • -server

选择服务器模式运行VM,64位版本的JDK仅仅支持服务器模式,

更多信息查看:http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

  • -showversion

展示当前JDK的版本信息,然后继续执行应用,和-version类似,只不过后者打印版本信息后直接退出JVM。

  • -splash:imgname

启动应用之前,先展示以个图片,比如我们如果要在启动一个应用之前展示一个splash.gif,如下:

-splash:images/splash.gif
  • -verbose:class

展示出每一个被加载的类

  • -verbose:gc

展示出每一次垃圾回收事件。

  • -verbose:jni

展示本地方法的使用,以及本地接口的活动。

  • -version

查看jdk版本

  • -version:release

指定运行应用时的java版本,比如,要运行一个类或者jar需要JRE 6u13 (1.6.0_13)或者任何JRE 6在6u10 (1.6.0_10)之上的版本,使用下面参数:

-version:"1.6.0_13 1.6* & 1.6.0_10+"