非標準參數又稱爲擴展參數,其列表如下:
-Xint
設置jvm以解釋模式運行,所有的字節碼將被直接執行,而不會編譯成本地碼。
-Xbatch
關閉後臺代碼編譯,強制在前臺編譯,編譯完成之後才能進行代碼執行;
默認情況下,jvm在後臺進行編譯,若沒有編譯完成,則前臺運行代碼時以解釋模式運行。
-Xbootclasspath:bootclasspath
讓jvm從指定路徑(可以是分號分隔的目錄、jar、或者zip)中加載bootclass,用來替換jdk的rt.jar;若非必要,一般不會用到;
-Xbootclasspath/a:path
將指定路徑的所有文件追加到默認bootstrap路徑中;
-Xbootclasspath/p:path
讓jvm優先於bootstrap默認路徑加載指定路徑的所有文件;
-Xcheck:jni
對JNI函數進行附加check;此時jvm將校驗傳遞給JNI函數參數的合法性,在本地代碼中遇到非法數據時,jmv將報一個致命錯誤而終止;使用該參數後將造成性能下降,請慎用。
-Xfuture
讓jvm對類文件執行嚴格的格式檢查(默認jvm不進行嚴格格式檢查),以符合類文件格式規範,推薦開發人員使用該參數。
-Xnoclassgc
關閉針對class的gc功能;因爲其阻止內存回收,所以可能會導致OutOfMemoryError錯誤,慎用;
-Xincgc
開啓增量gc(默認爲關閉);這有助於減少長時間GC時應用程序出現的停頓;但由於可能和應用程序併發執行,所以會降低CPU對應用的處理能力。
-Xloggc:file
與-verbose:gc功能類似,只是將每次GC事件的相關情況記錄到一個文件中,文件的位置最好在本地,以避免網絡的潛在問題。
若與verbose命令同時出現在命令行中,則以-Xloggc爲準。
-Xmsn
指定jvm堆的初始大小,默認爲物理內存的1/64,最小爲1M;可以指定單位,比如k、m,若不指定,則默認爲字節。
-Xmxn
指定jvm堆的最大值,默認爲物理內存的1/4或者1G,最小爲2M;單位與-Xms一致。
-Xprof
跟蹤正運行的程序,並將跟蹤數據在標準輸出輸出;適合於開發環境調試。
-Xrs
減少jvm對操作系統信號(signals)的使用,該參數從1.3.1開始有效;
從jdk1.3.0開始,jvm允許程序在關閉之前還可以執行一些代碼(比如關閉數據庫的連接池),即使jvm被突然終止;
jvm
關閉工具通過監控控制檯的相關事件而滿足以上的功能;更確切的說,通知在關閉工具執行之前,先註冊控制檯的控制handler,然後對
CTRL_C_EVENT, CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, and
CTRL_SHUTDOWN_EVENT這幾類事件直接返回true。
但如果jvm以服務的形式在後臺運行(比如servlet引擎),他能接
收CTRL_LOGOFF_EVENT事件,但此時並不需要初始化關閉程序;爲了避免類似衝突的再次出現,從jdk1.3.1開始提供-Xrs參數;當此
參數被設置之後,jvm將不接收控制檯的控制handler,也就是說他不監控和處理CTRL_C_EVENT,
CTRL_CLOSE_EVENT, CTRL_LOGOFF_EVENT, or
CTRL_SHUTDOWN_EVENT事件。
-Xssn
設置單個線程棧的大小,一般默認爲512k。
上面這些參數中,比如-Xmsn、-Xmxn……
都是我們性能優化中很重要的參數;
-Xprof、-Xloggc:file
等都是在沒有專業跟蹤工具情況下排錯的好手;
在上一小節中提到的關於JProfiler的配置中就使用到了-Xbootclasspath/a:path
;