java虚拟机参数详解
Java在运⾏已编译完成的类时,是通过java虚拟机来装载和执⾏的,java虚拟机通过操作系统命令JAVA_HOME/bin/java –option 来启动,-option为虚拟机参数,JAVA_HOME为JDK安装路径,通过这些参数可对虚拟机的运⾏状态进⾏调整,掌握参数的含义可对虚拟机的运⾏模式有更深⼊理解。
虚拟机参数分为基本和扩展两类,在命令⾏中输⼊JAVA_HOME/bin/java 就可得到基本参数列表,
在命令⾏输⼊JAVA_HOME/bin/java –X 就可得到扩展参数列表。
基本参数说明:
-client,-server
这两个参数⽤于设置虚拟机使⽤何种运⾏模式,client模式启动⽐较快,但运⾏时性能和内存管理效率不如server模式,通常⽤于客户端应⽤程序。相反,server模式启动⽐client慢,但可获得更⾼的运⾏性能。
在windows上,缺省的虚拟机类型为client模式,如果要使⽤server模式,就需要在启动虚拟机时加-server参数,以获得更⾼性能,对服务器端应⽤,推荐采⽤server模式,尤其是多个CPU的系统。在Linux,Solaris上缺省采⽤server模式。
-hotspot
含义与client相同,jdk1.4以前使⽤的参数,jdk1.4开始不再使⽤,代之以client。
-classpath,-cp
虚拟机在运⾏⼀个类时,需要将其装⼊内存,虚拟机搜索类的⽅式和顺序如下:
Bootstrap classes,Extension classes,User classes。
Bootstrap 中的路径是虚拟机⾃带的jar或zip⽂件,虚拟机⾸先搜索这些包⽂件,⽤Property("sun.boot.class.path")可得到虚拟机搜索的包名。
Extension是位于jre/lib/ext⽬录下的jar⽂件,虚拟机在搜索完Bootstrap后就搜索该⽬录下的jar⽂件。⽤System.
getProperty("dirs”)可得到虚拟机使⽤Extension搜索路径。
User classes搜索顺序为当前⽬录、环境变量 CLASSPATH、-classpath。
-classpath告知虚拟机搜索⽬录名、jar⽂档名、zip⽂档名,之间⽤分号;分隔。
例如当你⾃⼰开发了公共类并包装成⼀个common.jar包,在使⽤common.jar中的类时,就需要⽤-classpath common.jar 告诉虚拟机从common.jar中查该类,否则虚拟机就会抛出java.lang.NoClassDefFoundError异常,表明未到类定义。
在运⾏时可⽤Property(“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。
java设置环境变量的方法代码-D<propertyName>=value
在虚拟机的系统属性中设置属性名/值对,运⾏在此虚拟机之上的应⽤程序可⽤Property(“propertyName”)得到value的值。如果value中有空格,则需要⽤双引号将该值括起
来,如-Dname=”space string”。该参数通常⽤于设置系统级全局变量值,如配置⽂件路径,应为该属性在程序中任何地⽅都可访问。
-verbose[:class|gc|jni]
在输出设备上显⽰虚拟机运⾏信息。verbose和verbose:class含义相同,输出虚拟机装⼊的类的信息,显⽰的信息格式如下:[Loaded java.io.FilePermission$1 from shared objects file]当虚拟机报告类不到或类冲突时可⽤此参数来诊断来查看虚拟机从装⼊类的情况。
-verbose:gc在虚拟机发⽣内存回收时在输出设备显⽰信息,格式如下:[Full GC 268K->168K(1984K), 0.0187390 secs]该参数⽤来监视虚拟机内存回收的情况。
-verbose:jni在虚拟机调⽤native⽅法时输出设备显⽰信息,格式如下:[Dynamic-linking native method HelloNative.sum ... JNI]该参数⽤来监视虚拟机调⽤本地⽅法的情况,在发⽣jni错误时可为诊断提供便利。
-version
显⽰可运⾏的虚拟机版本信息然后退出。⼀台机器上装有不同版本的JDK时
-showversion
显⽰版本信息以及帮助信息。
-ea[:<packagename>...|:<classname>]-enableassertions[:<packagename>...|:<classname>]从JDK1.4开始,java可⽀持断⾔机制,⽤于诊断运⾏时问题。通常在测试阶段使断⾔有效,在正式运⾏时不需要运⾏断⾔。断⾔后的表达式的值是⼀个逻辑值,为true时断⾔不运⾏,为false时断⾔运⾏,抛出java.lang.AssertionError错误。上述参数就⽤来设置虚拟机是否启动断⾔机制,缺省时虚拟机关闭断⾔机制,⽤-ea可打开断⾔机制,不加<packagename>和classname时运⾏所有包和类中的断⾔,如果希望只运⾏某些包或类中的断⾔,可将包名或类名加到-ea之后。例如要启动包com.foo.util中的断⾔,可⽤命令 –ea:com.foo.util 。
-da[:<packagename>...|:<classname>]-disableassertions[:<packagename>...|:<classname>]⽤来设置虚拟机关闭断⾔处
理,packagename和classname的使⽤⽅法和-ea相同。
-esa | -enablesystemassertions
设置虚拟机显⽰系统类的断⾔。
-dsa | -disablesystemassertions
设置虚拟机关闭系统类的断⾔。
-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⽂件。
-agentpath:<pathname>[=<options>]
设置虚拟机按全路径装载本地库,不再搜索PATH中的路径。其他功能和agentlib相同。
-javaagent:<jarpath>[=<options>]
虚拟机启动时装⼊java语⾔设备代理。Jarpath⽂件中的mainfest⽂件必须有Agent-Class属性。代理类要实现public static void premain(String agentArgs, Instrumentation inst)⽅法。当虚拟机初始化时,将按代理类的说明顺序调⽤premain⽅法。
参见:java.lang.instrument
扩展参数说明
-Xmixed
设置-client模式虚拟机对使⽤频率⾼的⽅式进⾏Just-In-Time编译和执⾏,对其他⽅法使⽤解释⽅式执⾏。该⽅式是虚拟机缺省模式。
-Xint
设置-client模式下运⾏的虚拟机以解释⽅式执⾏类的字节码,不将字节码编译为本机码。
-Xbootclasspath:path
-Xbootclasspath/a:path
-
Xbootclasspath/p:path
改变虚拟机装载缺省系统运⾏包rt.jar⽽从-Xbootclasspath中设定的搜索路径中装载系统运⾏类。除⾮你⾃⼰能写⼀个运⾏时,否则不会⽤到该参数。/a:将在缺省搜索路径后加上path 中的搜索路径。/p:在缺省搜索路径前先搜索path中的搜索路径。
-Xnoclassgc
关闭虚拟机对class的垃圾回收功能。
-Xincgc
启动增量垃圾收集器,缺省是关闭的。增量垃圾收集器能减少偶然发⽣的长时间的垃圾回收造成的暂停时间。但增量垃圾收集器和应⽤程序并发执⾏,因此会占⽤部分CPU在应⽤程序上的功能。
-Xloggc:<file>
将虚拟机每次垃圾回收的信息写到⽇志⽂件中,⽂件名由file指定,⽂件格式是平⽂件,内容和-verbose:gc输出内容相同。
-Xbatch
虚拟机的缺省运⾏⽅式是在后台编译类代码,然后在前台执⾏代码,使⽤-Xbatch参数将关闭虚拟机后台编译,在前台编译完成后再执⾏。
-Xms<size>
设置虚拟机可⽤内存堆的初始⼤⼩,缺省单位为字节,该⼤⼩为1024的整数倍并且要⼤于1MB,可⽤k(K)或m(M)为单位来设置较⼤的内存数。初始堆⼤⼩为2MB。
例如:-Xms6400K,-Xms256M
-Xmx<size>
设置虚拟机内存堆的最⼤可⽤⼤⼩,缺省单位为字节。该值必须为1024整数倍,并且要⼤于2MB。可⽤k(K)或m(M)为单位来设置较⼤的内存数。缺省堆最⼤值为64MB。
例如:-Xmx81920K,-Xmx80M
当应⽤程序申请了⼤内存运⾏时虚拟机抛出java.lang.OutOfMemoryError: Java heap space错误,就需要使⽤-Xmx设置较⼤的可⽤内存堆。
-Xss<size>
设置线程栈的⼤⼩,缺省单位为字节。与-Xmx类似,也可⽤K或M来设置较⼤的值。通常操作系统分配给线程栈的缺省⼤⼩为1MB。
另外也可在java中创建线程对象时设置栈的⼤⼩,构造函数原型为Thread(ThreadGroup group, Runnable target, String name, long stackSize)。
-Xprof
输出CPU运⾏时的诊断信息。
-Xfuture
对类⽂件进⾏严格格式检查,以保证类代码符合类代码规范。为保持向后兼容,虚拟机缺省不进⾏严格的格式检查。
-Xrs
减少虚拟机中操作系统的信号(singals)的使⽤。该参数通常⽤在虚拟机以后台服务⽅式运⾏时使⽤(如Servlet)。
-Xcheck:jni
调⽤JNI函数时进⾏附加的检查,特别地虚拟机将校验传递给JNI函数参数的合法性,在本地代码中遇到⾮法数据时,虚拟机将报⼀个致命错误⽽终⽌。使⽤该参数后将造成性能下降。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。