1.1
格式
java[jvmargs]class[arguments]
1.2
標(biāo)準(zhǔn)參數(shù)
1.-server
-client
虛擬機(jī)服務(wù)器模式
/
客戶機(jī)模式,使用
server
模式可以提高性能,啟動(dòng)比
client
模式慢,長(zhǎng)期運(yùn)行則比
client
模式快。當(dāng)該參數(shù)不指定時(shí),虛擬機(jī)啟動(dòng)檢測(cè)主機(jī)是否為服務(wù)器,如果是則以
server
模式啟動(dòng),否則以
client
模式啟動(dòng),
J2SE5.0
檢測(cè)的根據(jù)是至少
2
個(gè)
CPU
和最低
2GB
內(nèi)存。(編者注:使用server模式啟動(dòng)必須使用JDK,但是對(duì)于機(jī)器好像沒(méi)有這個(gè)要求)
2.-agentlib:<lib-name>=<options>
-agentpath:<lib-path>=<options>
本地類庫(kù)加載,當(dāng)你的部分類包含一些本地方法時(shí),需要自己編寫(xiě)本地代碼并位于操作系統(tǒng)加載共享包
(dll)
的路徑上,如果你不喜歡將該包放在操作系統(tǒng)識(shí)別的加載上,則可以通過(guò)指定這個(gè)參數(shù)來(lái)加載自己的本地共享包
(dll)
。不同之處在于
-agentlib
中僅指定包名,根據(jù)操作系統(tǒng)的不同虛擬機(jī)在一定路徑上搜索該包,譬如對(duì)于
windows
平臺(tái)虛擬機(jī)在
PATH
路徑上搜索該包,而
lib-path
則是指定全路徑,例如
-agentlib:hprof
在
windows
平臺(tái)虛擬機(jī)會(huì)在啟動(dòng)時(shí)到
PATH
路徑上搜索
hprof.dll
并加載
虛擬機(jī)在加載代理包之后有一個(gè)啟動(dòng)的操作(詳細(xì)參見(jiàn)
JDK
參考),
<options>
指的是代理包的啟動(dòng)參數(shù)
3.-classpathclasspath
-cclasspath
指定類路徑,系統(tǒng)應(yīng)用類加載器
(ClassLoader)
會(huì)到該路徑下加載類
4.-Dproperty=value
設(shè)置系統(tǒng)屬性,可以通過(guò)
System.getProperty(property)
獲得
5.-enableassertions[:<packagename>"..."|:<classname>]
-ea[:<packagename>"..."|:<classname>]
-disableassertions[:<packagename>"..."|:<class;]
-da[:<packagename>"..."|:<classname>]
啟用和停用斷言,默認(rèn)是停用斷言。斷言指的是從
JDK1.4
開(kāi)始在支持的關(guān)鍵字
assert
,
assert(booleanvalue)
,當(dāng)
booleanvalue
為
false
時(shí),拋出
java.lang.AssertionError
,必須指出的是,代碼編譯必須是
1.4
及其以上順從的,即編譯時(shí)使用如下參數(shù)
java-source1.4
一般僅在開(kāi)發(fā)階段啟用斷言,而在運(yùn)行階段不使用
其使用包括如下幾種情況
java-ea//
啟動(dòng)斷言
java-ea:pkname...//
在包
pkname
及其子包下起用斷言
java-ea:pkname.classname//
對(duì)類
pkname.classname
啟用斷言
停用斷言與啟用設(shè)置類似
6.-enablesystemassertions
-esa
-disablesystemassertions
-dsa
啟用和停用系統(tǒng)類斷言
7.-jar
運(yùn)行包含在一個(gè)
jar
包里的程序,一般在
jar
包的
/META-INF/MANIFEST.MF
文件中指定
Main-Class
值為要運(yùn)行的主函數(shù),譬如
Main-Class:ayufox.ejb3.Test
8.-javaagent:<classname>[<=options>]
加載
java
語(yǔ)言代理,該功能是
JDK5
新增加的,可以通過(guò)該設(shè)置在
JVM
運(yùn)行主函數(shù)
(main)
之前做一些預(yù)處理工作,其中
classname
中必須包含有靜態(tài)方法
publicstaticvoidpremain(StringagentArgs,Instrumentationinst){...}
上面的
options
即是傳入該函數(shù)的代理參數(shù)
agentArgs
,關(guān)于
Instrumentation
詳細(xì)參見(jiàn)包
java.lang.instrument
9.-verbose
-verbose:class
-verbose:gc
-verbose:jni
在運(yùn)行時(shí)
class:
將類加載情況在控制臺(tái)中打印出來(lái)
gc:
將虛擬機(jī)的垃圾回收事件信息打印
jni:
放本地方法調(diào)用信息打印
-verbose
與
-verbose:class
一樣
10.-version
-showversion
顯示版本信息,不同在于第一種顯示版本后虛擬機(jī)結(jié)束退出
11.-?
-help
顯示幫助信息并退出
12.-X
顯示非標(biāo)準(zhǔn)參數(shù)(見(jiàn)下面介紹)并退出
1.3
非標(biāo)準(zhǔn)參數(shù)(以
-X
開(kāi)頭)
1.-Xint
所有字節(jié)碼以解析模式運(yùn)行。第一代虛擬機(jī)即是以這種方式運(yùn)行,由于需要
Java
解析器解析運(yùn)行,所以效率比較低;第二代虛擬機(jī)則采用將字節(jié)碼編譯成本地代碼的方式,效率大大提高;第三代虛擬機(jī)也叫自適應(yīng)
(HotSpot)
虛擬機(jī),通過(guò)監(jiān)測(cè)代碼的執(zhí)行情況檢測(cè)出代碼被頻繁執(zhí)行的部分,將其盡量?jī)?yōu)化成本地代碼方式運(yùn)行,而對(duì)于普通部分,則采用解析的模式運(yùn)行。
2.-Xbatch
禁止后臺(tái)編譯,一般
HotSpot
虛擬機(jī)在檢測(cè)到一段代碼為頻繁執(zhí)行代碼需要將其編譯成本地代碼時(shí),會(huì)啟動(dòng)一個(gè)后臺(tái)線程完成這個(gè)工作,而同時(shí)采用解析的方式繼續(xù)運(yùn)行字節(jié)碼。如果設(shè)置了該參數(shù),則會(huì)停止繼續(xù)執(zhí)行字節(jié)碼,先將其編譯成本地代碼,然后再繼續(xù)執(zhí)行。
3.-Xdebug
-Xnoagent
-Xrun
-Xrunjdwp
啟用調(diào)試模式,見(jiàn)前面的《利用
JPDA
構(gòu)建調(diào)試平臺(tái)》這篇文章,后面將在一個(gè)獨(dú)立的文章中詳細(xì)介紹
4.-Xbootclasspath:bootclasspath
-Xbootclasspath/a:path
-Xbootclasspath/p:path
設(shè)置啟動(dòng)根
Classpath
,即使啟動(dòng)類加載器將在何處加載對(duì)象,關(guān)于類啟動(dòng)加載器,參見(jiàn)《
JVM
類加載器體系結(jié)構(gòu)》說(shuō)明,分號(hào)后面的值指定路徑,以分號(hào)隔開(kāi)。其區(qū)別在于,
-Xbootclasspath:bootclasspath
將新的根加載路徑覆蓋默認(rèn)的路徑(
\jre\lib\rt.jar
),
-Xbootclasspath/a:path
將新的根加載路徑和原有的根加載路徑相結(jié)合,
-Xbootclaspath/p:path
將新的根加載路徑與原有的根加載路徑相結(jié)合,加載類時(shí)優(yōu)先搜索該加載路徑
5.-Xcheck:jni
對(duì)本地調(diào)用(
JNI
)采用更嚴(yán)格的檢測(cè)方式,在進(jìn)行
JNI
調(diào)用之前檢測(cè)數(shù)據(jù)和傳入?yún)?shù),如果碰到不合法的數(shù)據(jù)則強(qiáng)制結(jié)束掉虛擬機(jī),對(duì)運(yùn)行性能有損害
6.-Xfuture
對(duì)類格式
(class
文件格式
)
采用更嚴(yán)格的檢測(cè)方式,以便向后兼容,最好在開(kāi)發(fā)時(shí)采用該參數(shù)
7.-Xnoclassgc
不使用回收裝載類的內(nèi)存
(
轉(zhuǎn)貼備注
:
按原文修改
)
8.-Xloggc:file
與
-verbose:gc
功能一樣,不同在于
-Xloggc:file
將信息記錄到一個(gè)文件,而
-verbose:gc
將其輸出到控制臺(tái)
9.-Xincgc
-Xmsn
-Xmxn
-Xssn
跟內(nèi)存分配和垃圾回收相關(guān),
-Xincgc
表示采用漸進(jìn)式垃圾回收,
-Xmsn
設(shè)置初始內(nèi)存池大小,
-Xmxn
表示內(nèi)存池允許的最大大小,
-Xssn
是線程棧大小,
n
是要設(shè)置的值,必須是
1024
的倍數(shù),譬如
-Xms6291456-Xmx83886080
-Xms6144k-Xmx81920k
-Xms6m-Xmx80m
該部分對(duì)虛擬機(jī)的性能非常重要,在后面將有獨(dú)立的篇章詳細(xì)介紹
10.-Xprof
-Xrunhprof[:help][:<suboption>=<value>,...]
在運(yùn)行時(shí)剖析運(yùn)行情況,并將剖析結(jié)果打印到控制臺(tái),其中后一個(gè)可以指定特定剖析對(duì)象,譬如
cpu
,堆
(heap)
等,可以運(yùn)行
java-Xrunhprof:help
獲得可以剖析的對(duì)象和取值
11.-Xrs
減少
JVM
對(duì)操作系統(tǒng)信號(hào)量的使用,
J2SE1.3.1
開(kāi)始引入。
SUN
在
J2SE1.3.0
中增加了
Java
應(yīng)用程序關(guān)閉時(shí)的回調(diào)鉤子
(Hook)
,以便當(dāng)
JVM
意外終止時(shí)用戶可以做一些資源清除工作。
JVM
監(jiān)視控制臺(tái)事件以實(shí)現(xiàn)
JVM
意外終止時(shí)的回調(diào)。
JVM
明確地注冊(cè)了一個(gè)控制臺(tái)控制處理器,當(dāng)
JVM
接收到
CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT,
或
CTRL_SHUTDOWN
事件時(shí),該處理器介入關(guān)閉回掉鉤子
(HOOK)
的處理。
如果虛擬機(jī)以服務(wù)的方式運(yùn)行(譬如
WEB
服務(wù)器)當(dāng)其收到
CTRL_LOGOFF_EVENT
事件,由于系統(tǒng)并不會(huì)因此終止
JVM
進(jìn)程,故
JVM
不可以進(jìn)行終止的操作,然而這與如上產(chǎn)生了沖突(不結(jié)束卻又調(diào)用關(guān)閉回調(diào)鉤子),為了避免這個(gè)問(wèn)題,從
J2SE1.3.1
使用
-Xrs
以使
JVM
不再監(jiān)測(cè)控制臺(tái)事件。
參考:
JDK5.0
參考文檔
http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html
?