java下令扩展参数

java命令扩展参数序言:?? Java?在运行已编译完成的类时,是通过?java?虚拟机来装载和执行的,java?虚拟机通

java命令扩展参数

序言:??
Java?在运行已编译完成的类时,是通过?java?虚拟机来装载和执行的,java?虚拟机通过操作
系统命令?JAVA_HOME\bin\java??option?来启动,-option?为虚拟机参数,JAVA_HOME?为JDK
安装路径,通过这些参数可对虚拟机的运行状态进行调整,掌握参数的含义可对虚拟机的运
行模式有更深入理解。?
?
一、??查看参数列表:??
虚拟机参数分为基本和扩展两类,在命令行中输入?JAVA_HOME\bin\java?就可得到基本参数
列表,?
?
在命令行输入?JAVA_HOME\bin\java??X?就可得到扩展参数列表。?
?
二、??基本参数说明:?
?
1.??-client,-server?
?
这两个参数用于设置虚拟机使用何种运行模式,client?模式启动比较快,但运行时性能和
内存管理效率不如?server?模式,通常用于客户端应用程序。相反,server?模式启动比?client
慢,但可获得更高的运行性能。?
?
在?windows上,缺省的虚拟机类型为?client?模式,如果要使用?server模式,就需要在启动
虚拟机时加-server?参数,以获得更高性能,对服务器端应用,推荐采用?server?模式,尤
其是多个?CPU?的系统。在?Linux,Solaris?上缺省采用?server模式。?
?
?
2.??-hotspot?
?
含义与?client?相同,jdk1.4?以前使用的参数,jdk1.4?开始不再使用,代之以?client。?
?
?
3.??-classpath,-cp?
虚拟机在运行一个类时,需要将其装入内存,虚拟机搜索类的方式和顺序如下:?
?
Bootstrap?classes,Extension?classes,User?classes。?
?
Bootstrap?中的路径是虚拟机自带的?jar?或?zip?文件,虚拟机首先搜索这些包文件,用
System.getProperty("sun.boot.class.path")可得到虚拟机搜索的包名。?
?
Extension?是位于?jre\lib\ext?目录下的?jar?文件,虚拟机在搜索完?Bootstrap?后就搜索该
目录下的?jar?文件。用?System.?getProperty("java.ext.dirs”)可得到虚拟机使用
Extension?搜索路径。?
?
User?classes?搜索顺序为当前目录、环境变量?CLASSPATH、-classpath。?
?
?
4.??-classpath?
告知虚拟机搜索目录名、jar?文档名、zip?文档名,之间用分号;分隔。?
?
例如当你自己开发了公共类并包装成一个?common.jar?包,在使用?common.jar?中的类时,就
需要用-classpath?common.jar?告诉虚拟机从?common.jar?中查找该类,否则虚拟机就会抛
出?java.lang.NoClassDefFoundError异常,表明未找到类定义。?
?
在运行时可用?System.getProperty(“java.class.path”)得到虚拟机查找类的路径。?
?
?
使用-classpath?后虚拟机将不再使用?CLASSPATH?中的类搜索路径,如果-classpath?和
CLASSPATH?都没有设置,则虚拟机使用当前路径(.)作为类搜索路径。?
?
推荐使用-classpath?来定义虚拟机要搜索的类路径,而不要使用环境变量?CLASSPATH?的搜
索路径,以减少多个项目同时使用?CLASSPATH?时存在的潜在冲突。例如应用?1?要使用
a1.0.jar?中的类?G,应用?2?要使用?a2.0.jar?中的类?G,a2.0.jar?是?a1.0.jar?的升级包,当
a1.0.jar,a2.0.jar?都在?CLASSPATH?中,虚拟机搜索到第一个包中的类?G?时就停止搜索,
如果应用1应用2的虚拟机都从CLASSPATH中搜索,就会有一个应用得不到正确版本的类G。?
?
?
5.??-D<propertyName>=value?
在虚拟机的系统属性中设置属性名/值对,运行在此虚拟机之上的应用程序可用
?
当虚拟机报告类找不到或类冲突时可用此参数来诊断来查看虚拟机从装入类的情况。?
?
?
7.??-verbose:gc?
在虚拟机发生内存回收时在输出设备显示信息,格式如下:?
?
[Full?GC?268K->168K(1984K),?0.0187390?secs]?
?
该参数用来监视虚拟机内存回收的情况。?
?
?
8.??-verbose:jni?
在虚拟机调用?native?方法时输出设备显示信息,格式如下:?
?
[Dynamic-linking?native?method?HelloNative.sum?...?JNI]?
该参数用来监视虚拟机调用本地方法的情况,在发生?jni错误时可为诊断提供便利。?
?
?
9.??-version?
显示可运行的虚拟机版本信息然后退出。一台机器上装有不同版本的?JDK?时?
?
?
10.?-showversion?
显示版本信息以及帮助信息。?
?
?
11.?-ea[:<packagename>...|:<classname>]?
12.?-enableassertions[:<packagename>...|:<classname>]?
?
从?JDK1.4?开始,java?可支持断言机制,用于诊断运行时问题。通常在测试阶段使断言有效,
在正式运行时不需要运行断言。断言后的表达式的值是一个逻辑值,为?true?时断言不运行,
为?false?时断言运行,抛出?java.lang.AssertionError?错误。?
?
上述参数就用来设置虚拟机是否启动断言机制,缺省时虚拟机关闭断言机制,用-ea?可打开
断言机制,不加<packagename>和?classname?时运行所有包和类中的断言,如果希望只运行
某些包或类中的断言,可将包名或类名加到-ea?之后。例如要启动包?com.foo.util?中的断
言,可用命令??ea:com.foo.util?。?
?
?
13.?-da[:<packagename>...|:<classname>]?
14.?-disableassertions[:<packagename>...|:<classname>]?
?
用来设置虚拟机关闭断言处理,packagename和classname?的使用方法和-ea?相同。?
?
?
15.?-esa?|?-enablesystemassertions?
设置虚拟机显示系统类的断言。?
?
?
16.?-dsa?|?-disablesystemassertions?
设置虚拟机关闭系统类的断言。?
?
?
17.?-agentlib:<libname>[=<options>]?
该参数是?JDK5?新引入的,用于虚拟机装载本地代理库。?
?
Libname?为本地代理库文件名,虚拟机的搜索路径为环境变量?PATH?中的路径,options?为传
给本地库启动时的参数,多个参数之间用逗号分隔。在?Windows?平台上虚拟机搜索本地库名
为?libname.dll?的文件,在?Unix?上虚拟机搜索本地库名为?libname.so?的文件,搜索路径环
境变量在不同系统上有所不同,Linux、SunOS、IRIX上为LD_LIBRARY_PATH,AIX上为LIBPATH,
HP-UX?上为SHLIB_PATH。?
?
?
例如可使用-agentlib:hprof?来获取虚拟机的运行情况,包括?CPU、内存、线程等的运行数
据,并可输出到指定文件中,可用-agentlib:hprof=help?来得到使用帮助列表。在?jre\bin
目录下可发现?hprof.dll?文件。?
?
?
18.?-agentpath:<pathname>[=<options>]?
设置虚拟机按全路径装载本地库,不再搜索?PATH?中的路径。其他功能和?agentlib?相同。?
?
?
19.?-javaagent:<jarpath>[=<options>]?
虚拟机启动时装入java语言设备代理。Jarpath文件中的mainfest文件必须有Agent-Class
属性。代理类要实现?public?static?void?premain(String?agentArgs,?Instrumentation?
inst)方法。当虚拟机初始化时,将按代理类的说明顺序调用?premain方法。?
?
参见:java.lang.instrument?
?
?
?
三、??扩展参数说明?
?
1.??-Xmixed?
设置-client?模式虚拟机对使用频率高的方式进行?Just-In-Time?编译和执行,对其他方法
使用解释方式执行。该方式是虚拟机缺省模式。?
?
2.??-Xint?
设置-client模式下运行的虚拟机以解释方式执行类的字节码,不将字节码编译为本机码。?
?
3.??-Xbootclasspath:path?
4.??-Xbootclasspath/a:path?
5.??-Xbootclasspath/p:path?
?
改变虚拟机装载缺省系统运行包?rt.jar?而从-Xbootclasspath?中设定的搜索路径中装载系
统运行类。除非你自己能写一个运行时,否则不会用到该参数。?
?
/a:将在缺省搜索路径后加上?path?中的搜索路径。?
?
/p:在缺省搜索路径前先搜索?path?中的搜索路径。?
?
6.??-Xnoclassgc?
关闭虚拟机对?class?的垃圾回收功能。?
?
?
7.??-Xincgc?
启动增量垃圾收集器,缺省是关闭的。增量垃圾收集器能减少偶然发生的长时间的垃圾回收
造成的暂停时间。但增量垃圾收集器和应用程序并发执行,因此会占用部分?CPU?在应用程序
上的功能。?
?
8.??-Xloggc:<file>?
将虚拟机每次垃圾回收的信息写到日志文件中,文件名由?file?指定,文件格式是平文件,
内容和-verbose:gc?输出内容相同。?
?
?
9.??-Xbatch?
虚拟机的缺省运行方式是在后台编译类代码,然后在前台执行代码,使用-Xbatch参数将关
闭虚拟机后台编译,在前台编译完成后再执行。?
?
?
10.?-Xms<size>?
设置虚拟机可用内存堆的初始大小,缺省单位为字节,该大小为?1024?的整数倍并且要大于
1MB,可用?k(K)或m(M)为单位来设置较大的内存数。初始堆大小为?2MB。?
?
例如:-Xms6400K,-Xms256M?
?
?
11.?-Xmx<size>?
设置虚拟机内存堆的最大可用大小,缺省单位为字节。该值必须为?1024?整数倍,并且要大
于?2MB。可用?k(K)或?m(M)为单位来设置较大的内存数。缺省堆最大值为?64MB。?
?
例如:-Xmx81920K,-Xmx80M?
?
当应用程序申请了大内存运行时虚拟机抛出?java.lang.OutOfMemoryError:?Java?heap?
space?错误,就需要使用-Xmx?设媒洗蟮目捎媚诖娑选?BR>?
?
12.?-Xss<size>?
设置线程栈的大小,缺省单位为字节。与-Xmx?类似,也可用?K?或?M?来设置较大的值。通常
操作系统分配给线程栈的缺省大小为?1MB。?
?
另外也可在?java?中创建线程对象时设置栈的大小,构造函数原型为?Thread(ThreadGroup?
group,?Runnable?target,?String?name,?long?stackSize)。?
?
13.?-Xprof?
输出?CPU?运行时的诊断信息。?
?
?
14.?-Xfuture?
对类文件进行严格格式检查,以保证类代码符合类代码规范。为保持向后兼容,虚拟机缺省
不进行严格的格式检查。?
?
?
15.?-Xrs?
减少虚拟机中操作系统的信号(singals)的使用。该参数通常用在虚拟机以后台服务方式
运行时使用(如?Servlet)。?
?
?
16.?-Xcheck:jni?
调用?JNI?函数时进行附加的检查,特别地虚拟机将校验传递给?JNI?函数参数的合法性,在本
地代码中遇到非法数据时,虚拟机将报一个致命错误而终止。使用该参数后将造成性能下降。