Java, Only Java!

统计

留言簿(20)

积分与排名

好友空间

文档技巧

阅读排行榜

评论排行榜

JVM启动参数(转)

1.1 格式

java[jvmargs]class[arguments]

1.2 标准参数

1.-server

-client

虚拟机服务器模式 / 客户机模式,使用 server 模式可以提高性能,启动比 client 模式慢,长期运行则比 client 模式快。当该参数不指定时,虚拟机启动检测主机是否为服务器,如果是则以 server 模式启动,否则以 client 模式启动, J2SE5.0 检测的根据是至少 2 CPU 和最低 2GB 内存。(编者注:使用server模式启动必须使用JDK,但是对于机器好像没有这个要求)

2.-agentlib:<lib-name>=<options>

-agentpath:<lib-path>=<options>

本地类库加载,当你的部分类包含一些本地方法时,需要自己编写本地代码并位于操作系统加载共享包 (dll) 的路径上,如果你不喜欢将该包放在操作系统识别的加载上,则可以通过指定这个参数来加载自己的本地共享包 (dll) 。不同之处在于 -agentlib 中仅指定包名,根据操作系统的不同虚拟机在一定路径上搜索该包,譬如对于 windows 平台虚拟机在 PATH 路径上搜索该包,而 lib-path 则是指定全路径,例如

-agentlib:hprof windows 平台虚拟机会在启动时到 PATH 路径上搜索 hprof.dll 并加载

虚拟机在加载代理包之后有一个启动的操作(详细参见 JDK 参考), <options> 指的是代理包的启动参数

3.-classpathclasspath

-cclasspath

指定类路径,系统应用类加载器 (ClassLoader) 会到该路径下加载类

4.-Dproperty=value

设置系统属性,可以通过 System.getProperty(property) 获得

5.-enableassertions[:<packagename>"..."|:<classname>]

-ea[:<packagename>"..."|:<classname>]

-disableassertions[:<packagename>"..."|:<class;]

-da[:<packagename>"..."|:<classname>]

启用和停用断言,默认是停用断言。断言指的是从 JDK1.4 开始在支持的关键字 assert assert(booleanvalue) ,当 booleanvalue false 时,抛出 java.lang.AssertionError ,必须指出的是,代码编译必须是 1.4 及其以上顺从的,即编译时使用如下参数

java-source1.4

一般仅在开发阶段启用断言,而在运行阶段不使用

其使用包括如下几种情况

java-ea// 启动断言

java-ea:pkname...// 在包 pkname 及其子包下起用断言

java-ea:pkname.classname// 对类 pkname.classname 启用断言

停用断言与启用设置类似

6.-enablesystemassertions

-esa

-disablesystemassertions

-dsa

启用和停用系统类断言

7.-jar

运行包含在一个 jar 包里的程序,一般在 jar 包的 /META-INF/MANIFEST.MF 文件中指定 Main-Class 值为要运行的主函数,譬如 Main-Class:ayufox.ejb3.Test

8.-javaagent:<classname>[<=options>]

加载 java 语言代理,该功能是 JDK5 新增加的,可以通过该设置在 JVM 运行主函数 (main) 之前做一些预处理工作,其中 classname 中必须包含有静态方法

publicstaticvoidpremain(StringagentArgs,Instrumentationinst){...}

上面的 options 即是传入该函数的代理参数 agentArgs ,关于 Instrumentation 详细参见包 java.lang.instrument

9.-verbose

-verbose:class

-verbose:gc

-verbose:jni

在运行时

class: 将类加载情况在控制台中打印出来

gc: 将虚拟机的垃圾回收事件信息打印

jni: 放本地方法调用信息打印

-verbose -verbose:class 一样

10.-version

-showversion

显示版本信息,不同在于第一种显示版本后虚拟机结束退出

11.-?

-help

显示帮助信息并退出

12.-X

显示非标准参数(见下面介绍)并退出

1.3 非标准参数(以 -X 开头)

1.-Xint

所有字节码以解析模式运行。第一代虚拟机即是以这种方式运行,由于需要 Java 解析器解析运行,所以效率比较低;第二代虚拟机则采用将字节码编译成本地代码的方式,效率大大提高;第三代虚拟机也叫自适应 (HotSpot) 虚拟机,通过监测代码的执行情况检测出代码被频繁执行的部分,将其尽量优化成本地代码方式运行,而对于普通部分,则采用解析的模式运行。

2.-Xbatch

禁止后台编译,一般 HotSpot 虚拟机在检测到一段代码为频繁执行代码需要将其编译成本地代码时,会启动一个后台线程完成这个工作,而同时采用解析的方式继续运行字节码。如果设置了该参数,则会停止继续执行字节码,先将其编译成本地代码,然后再继续执行。

3.-Xdebug

-Xnoagent

-Xrun

-Xrunjdwp

启用调试模式,见前面的《利用 JPDA 构建调试平台》这篇文章,后面将在一个独立的文章中详细介绍

4.-Xbootclasspath:bootclasspath

-Xbootclasspath/a:path

-Xbootclasspath/p:path

设置启动根 Classpath ,即使启动类加载器将在何处加载对象,关于类启动加载器,参见《 JVM 类加载器体系结构》说明,分号后面的值指定路径,以分号隔开。其区别在于, -Xbootclasspath:bootclasspath 将新的根加载路径覆盖默认的路径( \jre\lib\rt.jar ), -Xbootclasspath/a:path 将新的根加载路径和原有的根加载路径相结合, -Xbootclaspath/p:path 将新的根加载路径与原有的根加载路径相结合,加载类时优先搜索该加载路径

5.-Xcheck:jni

对本地调用( JNI )采用更严格的检测方式,在进行 JNI 调用之前检测数据和传入参数,如果碰到不合法的数据则强制结束掉虚拟机,对运行性能有损害

6.-Xfuture

对类格式 (class 文件格式 ) 采用更严格的检测方式,以便向后兼容,最好在开发时采用该参数

7.-Xnoclassgc

不使用回收装载类的内存 ( 转贴备注 : 按原文修改 )

8.-Xloggc:file

-verbose:gc 功能一样,不同在于 -Xloggc:file 将信息记录到一个文件,而 -verbose:gc 将其输出到控制台

9.-Xincgc

-Xmsn

-Xmxn

-Xssn

跟内存分配和垃圾回收相关, -Xincgc 表示采用渐进式垃圾回收, -Xmsn 设置初始内存池大小, -Xmxn 表示内存池允许的最大大小, -Xssn 是线程栈大小, n 是要设置的值,必须是 1024 的倍数,譬如

-Xms6291456-Xmx83886080

-Xms6144k-Xmx81920k

-Xms6m-Xmx80m

该部分对虚拟机的性能非常重要,在后面将有独立的篇章详细介绍

10.-Xprof

-Xrunhprof[:help][:<suboption>=<value>,...]

在运行时剖析运行情况,并将剖析结果打印到控制台,其中后一个可以指定特定剖析对象,譬如 cpu ,堆 (heap) 等,可以运行 java-Xrunhprof:help 获得可以剖析的对象和取值

11.-Xrs

减少 JVM 对操作系统信号量的使用, J2SE1.3.1 开始引入。

SUN J2SE1.3.0 中增加了 Java 应用程序关闭时的回调钩子 (Hook) ,以便当 JVM 意外终止时用户可以做一些资源清除工作。 JVM 监视控制台事件以实现 JVM 意外终止时的回调。 JVM 明确地注册了一个控制台控制处理器,当 JVM 接收到 CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT, CTRL_SHUTDOWN 事件时,该处理器介入关闭回掉钩子 (HOOK) 的处理。

如果虚拟机以服务的方式运行(譬如 WEB 服务器)当其收到 CTRL_LOGOFF_EVENT 事件,由于系统并不会因此终止 JVM 进程,故 JVM 不可以进行终止的操作,然而这与如上产生了冲突(不结束却又调用关闭回调钩子),为了避免这个问题,从 J2SE1.3.1 使用 -Xrs 以使 JVM 不再监测控制台事件。

参考: JDK5.0 参考文档 http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html

 

posted on 2007-08-16 13:39 zYx.Tom 阅读(2109) 评论(2)  编辑  收藏

评论

# re: JVM启动参数(转) 2007-09-12 20:04 千里冰封

不错,这些参数确实有帮助  回复  更多评论   

# re: JVM启动参数(转) 2008-01-29 23:49 java综合网

http://www.javazh.cn

不错,不错哦  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: