Java平臺,標準版工具參考/Java應用啓動參數

不少都是谷歌翻譯過來的,看不懂去看官方文檔和百度
使用和閱讀須知:
        1. 因爲部分機器翻譯緣故,部分指令有中文符號與空格.使用時請注意替換符號與空格
        2.本篇文章基於Java SE 8 
        3.本文章翻譯子windows系統下的參數系列,由於筆者的學習環境基於windows,其餘
            系統平臺請自行參考:
           Java Platform, Standard Edition (Java SE) 8 : https://docs.oracle.com/javase/8/ 
 

概要


 
java [options] classname [args]
java [options] -jar文件名[args]
javaw [options] classname [args]
javaw [options] -jar filename [args]
選項
    命令行選項由空格分隔。參閱選項。
類名
    要啓動的類的名稱。
文件名
    要調用的Java歸檔(JAR)文件的名稱。僅與-jar選項一塊兒使用。
ARGS
    傳遞給main()方法的參數用空格分隔。
 

描述


        java命令啓動一個Java應用程序。它經過啓動Java運行時環境(JRE),加載指定的類並調用該類的main()方法來實現此目的。該方法必須聲明爲public和static,它不能返回任何值,而且它必須接受一個String數組做爲參數。方法聲明具備如下形式:

 
public static void main(String [] args)

 

 
 
        經過加載具備main()方法或擴展javafx.application.Application的類,java命令可用於啓動JavaFX應用程序。在後一種狀況下,啓動程序構造Application類的一個實例,調用其init()方法,而後調用start(javafx.stage.Stage)方法。
        默認狀況下,不是java命令選項的第一個參數是要調用的類的全限定名。若是指定了-jar選項,則其參數是包含應用程序的類和資源文件的JAR文件的名稱。啓動類必須在其源代碼中由Main-Class清單標題指示。
        JRE在三個位置中搜索啓動類(以及應用程序使用的其餘類):引導類路徑(bootstrap class path),已安裝的擴展(installed extensions)和用戶的類路徑(user's class path.)。[注]對應3個類加載器
        類文件名或JAR文件名後面的參數傳遞給main()方法。
        javaw命令與java相同,只是在javaw中沒有關聯的控制檯窗口。若是不但願顯示命令提示符窗口,請使用javaw。可是,若是啓動失敗,javaw啓動程序將顯示一個包含錯誤信息的對話框。
 

選項


        java命令支持普遍的選項,能夠分爲如下幾類:
1.標準選項(Standard Options)
2.非標準選項(Non-Standard Options)
3.高級運行時選項(Advanced Runtime Options)
4.高級JIT編譯器選項(Advanced JIT Compiler Options)
5.高級可維護選項(Advanced Serviceability  Options)
6.高級垃圾收集選項(Advanced Garbage Collection Options)
 
        Java虛擬機(JVM)的全部實現都支持標準選項。它們用於常見操做,例如檢查JRE的版本,設置類路徑,啓用詳細輸出等。
        非標準選項是特定於Java HotSpot虛擬機的通用選項,所以它們不保證被全部JVM實現支持,而且可能會有變化。這些選項以-X開頭。
        高級選項不建議隨意使用。這些是用於調整Java HotSpot虛擬機操做的特定區域的開發人員選項,這些操做一般具備特定的系統要求,而且可能須要對系統配置參數進行特權訪問。它們也不能保證被全部JVM實現支持,而且可能會發生變化。高級選項以-XX開頭。
        要跟蹤最新版本中不推薦使用或刪除的選項,在文檔末尾會有一個名爲「已棄用和已除去選項」的部分。
        boolean選項用於啓用默認禁用的功能或禁用默認啓用的功能。這些選項不須要參數。boolean-XX選項使用加號(-XX:+ OptionName)啓用,並使用減號(-XX:-OptionName)禁用。
        對於須要參數的選項,參數能夠經過空格,冒號(:)或等號(=)與選項名稱分開,或者參數能夠直接跟隨選項(每一個選項的確切語法不一樣)。若是您但願以字節爲單位指定大小,則能夠不使用後綴,也可使用後綴k或K表示千字節(KB),m或M表示兆字節(MB),g或G表示千兆字節(GB)。例如,要將大小設置爲8 GB,能夠指定8g,8192m,8388608k或8589934592做爲參數。若是您但願指定百分比,請使用從0到1的數字(例如,指定0.25當作25%)。
 

標準選項(Standard Options)


        這些是全部JVM實現都支持的最經常使用選項。
 
-agentlib:libname[=options]
加載指定的本地代理程序庫。庫名以後,可使用特定於庫的逗號分隔列表選項。
若是指定了選項-agentlib:foo,則JVM將嘗試在PATH系統變量指定的位置加載名爲foo.dll的庫。
如下示例顯示瞭如何加載堆分析工具(HPROF)庫,並每隔20 ms獲取一個簡單CPU信息,棧深度爲3:

 
-agentlib:hprof=cpu=samples,interval=20,depth=3

 

 
 
如下示例顯示如何加載 Java Debug Wire Protocol (JDWP)庫並監聽端口8000上的socket鏈接,並在加載主類以前掛起JVM:
 
 
-agentlib:jdwp=transport=dt_socket,server=y,address=8000

 

 
有關本地代理庫的更多信息,請參閱如下內容:
JVM工具界面指南中的代理程序命令行選項,位於 http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting
 
agentpath:pathname[=options]
        加載由絕對路徑名指定的本地代理程序庫。 此選項等同於-agentlib,但要使用庫的完整路徑和文件名。
 
-client
        選擇Java HotSpot客戶端VM。 Java SE開發工具包(JDK)的64位版本目前忽略此選項,而是使用Server VM。
        有關默認JVM選擇,請參閱Server-Class Machine Detection :  http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html 
 
-Dproperty=value
        設置系統屬性值。 該屬性變量是一個不帶空格的字符串,表示該屬性的名稱。 值變量是一個表示屬性值的字符串。 若是value是一個帶空格的字符串,則將其用引號引發來(例如-Dfoo="foo bar")。
 
-disableassertions[:[packagename]...|:classname]/-da[:[packagename]...|:classname]
        禁用斷言。默認狀況下,全部包和類中的斷言都是禁用的。
        若是沒有參數,-disableassertions(-da)將禁用全部包和類中的聲明。在packagename參數以...結尾的狀況下,將禁用指定包和任何子包中的斷言。若是參數只是...,那麼會禁用當前工做目錄中未命名包中的斷言。使用classname參數,交換機將禁用指定類中的斷言。
        -disableassertions(-da)選項適用於全部類加載器和系統類(它們沒有類加載器)。這個規則有一個例外:若是該選項沒有提供參數,那麼它不適用於系統類。這樣能夠很容易地禁用除系統類之外的全部類中的斷言。 -disablesystemassertions選項使您能夠禁用全部系統類中的斷言。
        要顯式啓用特定包或類中的斷言,請使用-enableassertions(-ea)選項。兩個選項能夠同時使用。例如,要在包com.wombat.fruitbat(和任何子包)中啓用斷言但在類com.wombat.fruitbat.Brickbat中禁用的狀況下運行MyClass應用程序,請使用如下命令:
 java -ea:com.wombat.fruitbat ... -da:com.wombat.fruitbat.Brickbat MyClass

 


 
-enablesystemassertions/-esa
        開啓全部系統類斷言
 
-help/-?
       顯示java命令的可用信息而不實際運行JVM。
 
-jar filename
        執行封裝在JAR文件中的程序。 filename參數是帶有清單的JAR文件的名稱,該清單包含Main-Class:classname形式的行,該行使用public static void main(String[] args)方法定義該類,該方法充當您的應用程序的起點。
        當使用-jar選項時,指定的JAR文件是全部用戶類的資源,而其餘類路徑設置將被忽略。
        有關JAR文件的更多信息,請參閱如下資源:
            2. Java存檔(JAR)文件指南,位於 http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html 
            3. 課程:打包JAR文件中的程序  http://docs.oracle.com/javase/tutorial/deployment/jar/index.html 
 
-javaagent:jarpath[=options]
        加載指定的Java編程語言代理。 有關檢測Java應用程序的更多信息,請參閱
        http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary  上的Java API文檔中的java.lang.instrument的包描述
 
-jre-restrict-search
        版本搜索中包含用戶私有的JRE。
 
-no-jre-restrict-search
        從版本搜索中排除用戶私有JRE。
 
-server
        選擇Java HotSpot Server VM。 64位版本的JDK僅支持服務器虛擬機,所以在這種狀況下,該選項是隱含的。
        有關默認JVM選擇,請參閱服務器級機器檢測  http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html 
 
-showversion
        顯示版本信息並繼續執行應用程序。該選項等同於-version選項,只是後者指示JVM在顯示版本信息後退出。
        
-splash:imgname
        用imgname指定的圖像顯示啓動畫面。例如,要在啓動應用程序時從images目錄顯示splash.gif文件,請使用如下選項:
-splash:img/splash.gif
-verbose:class
        顯示有關每一個加載的類的信息。
 
-verbose:GC
        顯示有關每一個垃圾收集(GC)事件的信息。
 
-verbose:JNI
        顯示有關使用本機方法和其餘Java Native Interface(JNI)活動的信息。
 
-version
        顯示版本信息,而後退出。該選項等同於-showversion選項,只是後者在顯示版本信息後不指示JVM退出。
 
-version:release
        指定用於運行應用程序的發行版本。若是調用的java命令的版本不符合此規範,而且在系統上找到適當的實現,則將使用適當的實現。
        release參數指定了確切的版本字符串,或者是由空格分隔的版本字符串和範圍列表。版本字符串是版本號的開發人員指定,格式以下:1.x.0_u(其中x是主要版本號,u是更新版本號)。版本範圍由版本字符串組成,後跟加號(+)以指定此版本或更高版本,或版本字符串的一部分,後跟星號(*)以指定具備匹配前綴的任何版本字符串。版本字符串和範圍可使用邏輯OR組合的空間或與兩個版本字符串/範圍的邏輯AND組合的和符號(&)組合。例如,若是運行類或JAR文件須要JRE 6u13(1.6.0_13)或從6u10(1.6.0_10)開始的任何JRE 6,請指定如下內容:
-version:- "1.6.0_13 1.6* & 1.6.0_10+"
        僅當發佈參數中有空格時,才須要引號。
        對於JAR文件,首選項是在JAR文件清單中指定版本要求,而不是在命令行上。
 

非標準選項/Non-Standard Options


這些選項是特定於Java HotSpot虛擬機的通用選項。
 
-X(大寫)
        展現全部可用-X選項
 
-Xbatch 
        禁用後臺編譯.默認狀況下,JVM將該方法編譯爲後臺任務,在解釋器模式下運行該方法,直到後臺編譯完成。 -Xbatch標誌禁用後臺編譯,以便編譯全部方法做爲前臺任務繼續執行直至完成。
        這個選項也至關於:
 
-XX:-BackgroundCompilation
 

 

-Xbootclasspath : path
        指定由分號(;)分隔的目錄,JAR文件和ZIP存檔的列表,以搜索引導類文件。 這些用於代替JDK中包含的引導類文件。
        不要部署使用此選項的應用程序來覆蓋rt.jar中的類,由於這違反了JRE二進制代碼許可證。
 
-Xbootclasspath/a : path
        指定由分號(;)分隔的目錄,JAR文件和ZIP存檔的列表,以附加到默認引導程序類路徑的末尾。
        不要部署使用此選項的應用程序來覆蓋rt.jar中的類,由於這違反了JRE二進制代碼許可證。
 
-Xbootclasspath/p : path
        指定由分號(;)分隔的目錄,JAR文件和ZIP存檔的列表,以預先添加到默認引導程序類路徑的前面。
        不要部署使用此選項的應用程序來覆蓋rt.jar中的類,由於這違反了JRE二進制代碼許可證。
 
-Xcheck : jni
        對Java Native Interface(JNI)函數執行其餘檢查。具體來講,它在處理JNI請求以前驗證傳遞給JNI函數的參數和運行時環境數據。遇到的任何無效數據都代表本機代碼存在問題,在這種狀況下,JVM將以沒法恢復的錯誤終止。使用此選項時,預計性能會降低。
 
-Xcomp
        在第一次調用時強制編譯方法。默認狀況下,客戶端VM(-client)執行1,000個已解釋的方法調用,服務器VM(-server)執行10,000個已解釋的方法調用以收集有效編譯的信息。指定-Xcomp選項會禁用已解釋的方法調用,從而以犧牲效率爲代價來提升編譯性能。
        您還可使用-XX:CompileThreshold選項在編譯以前更改已解釋的方法調用的數量。
        表示全部字節碼都首先被編譯成本地代碼,而後再執行。
        JIT編譯器的模式之一
 
-Xdebug
        什麼也沒作。提供向後兼容性。
 
-Xdiag
        顯示其餘診斷消息。
 
-Xfuture
        啓用嚴格的類文件格式檢查,以強制與類文件格式規範緊密一致。鼓勵開發人員在開發新代碼時使用此標誌,由於更嚴格的檢查將成爲將來版本中的默認值。
 
-Xint
        以僅解釋模式運行應用程序。禁用對本機代碼的編譯,而且解釋器將執行全部字節碼。暫時(JIT)編譯器提供的性能優點在此模式下不存在。
        表示禁用JIT,全部字節碼都被解釋執行,這個模式的速度最慢的。
        JIT編譯器的模式之一
 
-Xinternalversion
        顯示比-version選項更詳細的JVM版本信息,而後退出。
-Xloggc:filename
        設置應將重定向的GC事件信息重定向到的文件以進行日誌記錄。 寫入此文件的信息相似於-verbose:gc的輸出,其中包含自每一個記錄事件以前的第一個GC事件以來通過的時間。 若是二者都使用相同的java命令,則-Xloggc選項會覆蓋-verbose:gc。
        例:
 
-Xloggc:garbage-collection.log
 
-Xmaxjitcodesize=size
        指定JIT編譯代碼的最大代碼高速緩存大小(以字節爲單位)。 附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。 默認的最大代碼緩存大小爲240 MB; 
        若是使用-XX:- TieredCompilation選項禁用分層編譯,則默認大小爲48 MB:
 

-Xmaxjitcodesize=240m
 
        此選項等效於-XX:ReservedCodeCacheSize。

-Xmixed
        除了熱方法以外,解釋器執行全部字節碼,熱方法被編譯爲本機代碼。
        默認模式,讓JIT根據程序運行的狀況,有選擇地將經常使用代碼編譯成本地代碼。(如:被大量循環的代碼)
        JIT編譯器的模式之一
 
-Xmnsize
        設置年輕代(花園?託兒所?nursery我不知道怎麼翻譯)的堆的初始和最大大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。
        堆的年輕代區域用於新對象。 GC在該區域比在其餘區域更頻繁地進行。若是年輕一代的規模過小,那麼將會進行大量的小型垃圾收集。若是大小太大,則只執行完整的垃圾收集,這可能須要很長時間才能完成。 Oracle建議您將年輕代的大小保持在整個堆大小的一半到四分之一之間。
        如下示例顯示如何使用各類單位將年輕代的初始和最大大小設置爲256 MB:
 
-Xmn256m
-Xmn262144k
-Xmn268435456
 
         您可使用-XX : NewSize設置初始大小而使用-XX : MaxNewSize來設置最大大小,而不是-Xmn選項來設置年輕代的堆的初始大小和最大大小。
 
-Xmssize
        設置堆的初始大小(以字節爲單位)。 該值必須是1024的倍數且大於1 MB。 附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。
        如下示例顯示如何使用各類單位將分配的內存大小設置爲6 MB:
 
-Xms6291456
-Xms6144k
-Xms6m

 

 
        若是未設置此選項,則初始大小將設置爲爲舊代和年輕代分配的大小的總和。 可使用-Xmn選項或-XX:NewSize選項設置年輕代的堆的初始大小。
 
-Xmxsize
        指定內存分配池的最大大小(以字節爲單位),以字節爲單位。 該值必須是1024的倍數且大於2 MB。 附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。 根據系統配置在運行時選擇默認值。 對於服務器部署,-Xms和-Xmx一般設置爲相同的值。 請參閱 http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html  上的Java SE HotSpot虛擬機垃圾收集調整指南中的「人機工程學( Ergonomics)」部分。
        如下示例顯示如何使用各類單位將分配的內存的最大容許大小設置爲80 MB:
 
 
-Xmx83886080
-Xmx81920k
-Xmx80m
        -Xmx選項等效於-XX : MaxHeapSize。
 
-Xnoclassgc
        禁用類的垃圾收集(GC)[Disables garbage collection (GC) of classes]。 這能夠節省一些GC時間,從而縮短應用程序運行期間的中斷。
        在啓動時指定-Xnoclassgc時,應用程序中的類對象將在GC期間保持不變,並始終被視爲實時。 這可能致使更多的內存被永久佔用,若是不當心使用,將致使內存不足異常
 
-Xprof
        配置正在運行的程序並將分析數據發送到標準輸出。此選項做爲在程序開發中有用的實用程序提供,不適用於生產系統。
 
-Xrs
        減小JVM對操做系統信號的使用。
        關閉Hooks,經過在關閉時運行用戶清理代碼(例如關閉數據庫鏈接)來啓用Java應用程序的有序關閉,即便JVM忽然終止也是如此。
        JVM監視控制檯控制事件,以實現意外終止的關閉掛鉤。具體來講,JVM註冊一個控制檯控制處理程序,它啓動shutdown-hook處理,併爲CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT和CTRL_SHUTDOWN_EVENT返回TRUE。
        JVM使用相似的機制來實現轉儲線程堆棧的功能以進行調試。 JVM使用CTRL_BREAK_EVENT執行線程轉儲。
        若是JVM做爲服務運行(例如,做爲Web服務器的servlet引擎),則它能夠接收CTRL_LOGOFF_EVENT但不該啓動關閉,由於操做系統實際上不會終止該進程。爲避免可能的干擾,可使用-Xrs選項。 使用-Xrs選項時,JVM不會安裝控制檯控制處理程序,這意味着它不會監視或處理CTRL_C_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT或CTRL_SHUTDOWN_EVENT。
        指定-Xrs有兩個後果:
            Ctrl + Break線程轉儲不可用。
            用戶代碼負責引導關閉掛鉤運行,例如,在終止JVM時調用System.exit()。
 
-Xshare : mode
        設置類數據共享(CDS)模式。此選項的可能模式參數包括如下內容:
        auto
            儘量使用CDS。這是Java HotSpot 32位客戶端VM的默認值。
          on
            須要使用CDS。若是沒法使用類數據共享,則打印錯誤消息並退出。
         off
            不要使用CDS。這是Java HotSpot 32位服務器VM,Java HotSpot 64位客戶端VM和Java HotSpot 64位服務器VM的默認值。
         dump
            手動生成CDS存檔。按照「設置類路徑」中的說明指定應用程序類路徑。
        您應該使用每一個新的JDK版本從新生成CDS存檔。
 
-XshowSettings : category
        顯示設置並繼續。此選項的可能類別參數包括如下內容:
          all
                顯示全部類別的設置。這是默認值。
         locale
                顯示與區域設置相關的設置。
        properties
                顯示與系統屬性相關的設置。
          vm
                顯示JVM的設置。
        配置正在運行的程序並將分析數據發送到標準輸出。此選項做爲在程序開發中有用的實用程序提供,不適用於生產系統。
 
-Xsssize
        設置線程堆棧大小(以字節爲單位)。附加字母k或K表示KB,m或M表示MB,g或G表示GB。默認值取決於虛擬內存。
        如下示例以不一樣爲單位將線程堆棧大小設置爲1024 KB:
-Xss1m
-Xss1024k
-Xss1048576
        此選項等效於-XX:ThreadStackSize。
 
-Xverify:mode
        設置字節碼驗證器的模式。字節碼驗證可確保正確造成類文件,並知足「Java虛擬機規範」中第4.10節「類文件驗證」中列出的約束。
        不要關閉驗證,由於這會減小Java提供的保護,並可能因爲格式錯誤的類文件而致使問題。
        類加載:加載-驗證-準備-解析-初始化,這裏是其中一個階段:驗證階段
        此選項的可能模式參數包括如下內容:
remote
    驗證引導類加載器未加載的全部字節碼。若是未指定-Xverify選項,則這是默認行爲。
all
    啓用全部字節碼的驗證。
none
    禁用全部字節碼的驗證。使用-Xverify:none不受支持。
 

Advanced Runtime Options/高級運行時選項


這些選項控制Java HotSpot VM的運行時行爲。
 
-XX:+CheckEndorsedAndExtDirs
        若是Java命令使用endorsed-standards override機制或擴展機制,則啓用該選項以防止Java命令運行Java應用程序。此選項經過檢查如下內容來檢查應用程序是否正在使用這些機制之一:
                   設置了java.ext.dirs或java.endorsed.dirs系統屬性。
lib / endorsed目錄存在且不爲空。
lib / ext目錄包含除JDK以外的任何JAR文件。
系統範圍的特定於平臺的擴展目錄包含任何JAR文件。
 
-XX:+ DisableAttachMechanism
        啓用禁用容許工具鏈接到JVM的機制的選項。默認狀況下,此選項被禁用,這意味着啓用了附加機制,您可使用jcmd,jstack,jmap和jinfo等工具。
 
-XX:ErrorFile=filename
        指定發生不可恢復的錯誤時寫入錯誤數據的路徑和文件名。默認狀況下,此文件在當前工做目錄中建立,並命名爲hs_err_pidpid.log,其中pid是致使錯誤的進程的標識符。如下示例顯示如何設置默認日誌文件(請注意,進程的標識符指定爲%p):
 -XX:ErrorFile=/hs_err_pid%p.log

 


 
 
如下示例顯示如何將錯誤日誌文件設置爲C:/log/java/java_error.log:

-XX:ErrorFile= C:/log/java/java_error.log
 
        若是沒法在指定目錄中建立文件(因爲空間不足,權限問題或其餘問題),則會在操做系統的臨時目錄中建立該文件。臨時目錄由TMP環境變量的值指定;若是未定義該環境變量,則使用TEMP環境變量的值。
 
-XX:+FailOverToOldVerifier
        當新類型檢查程序失敗時,啓用對舊驗證程序的自動故障轉移。默認狀況下,此選項被禁用,而且對於具備最新字節碼版本的類,它將被忽略(即,視爲已禁用)。您能夠爲具備舊版字節碼的類啓用它。
 
-XX:+FlightRecorder
        容許在應用程序運行時使用Java Flight Recorder(JFR)。這是一個與-XX:+ UnlockCommercialFeatures選項配合使用的商業功能,以下所示:

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

 

 
 
        若是未提供此選項,則仍可經過提供相應的jcmd診斷命令在正在運行的JVM中啓用Java Flight Recorder。
 
-XX:-FlightRecorder
    在應用程序運行時禁用Java Flight Recorder(JFR)。這是一個與-XX:+ UnlockCommercialFeatures選項配合使用的商業功能,以下所示:

java -XX:+ UnlockCommercialFeatures -XX:-FlightRecorder

 

         若是提供此選項,則沒法在正在運行的JVM中啓用Java Flight Recorder。
 
-XX:FlightRecorderOptions=parameter=value
        設置控制JFR行爲的參數。這是一個與-XX:+UnlockCommercialFeatures選項配合使用的商業功能。只有在啓用JFR時(即指定了-XX:+FlightRecorder選項),才能使用此選項。
        如下列表包含全部可用的JFR參數:

defaultrecording={true|false}

 

 
 
        指定錄製是連續背景錄製仍是在有限時間內運行。默認狀況下,此參數設置爲false(錄製在限定時間內運行)。要使錄製連續運行,請將參數設置爲true。
 

disk={true|false}

 

 
 
        指定JFR是否應將連續記錄寫入磁盤。默認狀況下,此參數設置爲false(禁用連續錄製到磁盤)。要啓用它,請將參數設置爲true,並設置defaultrecording = true。
 

dumponexitpath=path

 

 
 
        指定是否應生成JFR數據的轉儲文件

dumponexit={true|false}

 

 
 
        指定當JVM以受控方式終止時是否應生成JFR數據的轉儲文件。默認狀況下,此參數設置爲false(不會生成退出時的轉儲文件)。要啓用它,請將參數設置爲true,並設置defaultrecording = true。
        轉儲文件將寫入dumponexitpath參數定義的位置。

dumponexitpath=path

 

 
 
        若是設置dumponexit = true參數,則指定JVM數據的轉儲文件的路徑和名稱,該數據是在受控方式JVM退出時建立的。僅當您還設置defaultrecording = true時,設置路徑纔有意義。
        若是指定的路徑是目錄,則JVM會分配一個顯示建立日期和時間的文件名。若是指定的路徑包含文件名,而且該文件已存在,則JVM經過將日期和時間戳附加到指定的文件名來建立新文件。
 

globalbuffersize=size

 

 
 
        指定用於數據保留的主內存總量(以字節爲單位)。附加k或K,以KB爲單位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB爲單位)。默認狀況下,大小設置爲462848字節。

loglevel={quiet|error|warning|info|debug|trace}

 

 
 
        指定JFR寫入日誌文件的數據量。默認狀況下,它設置爲info。

maxage=time

 

 
 
        指定要爲默認錄製保留的磁盤數據的最長期限。附加s指定以秒爲單位的時間,m表示分鐘,h表示小時,d表示天(例如,指定30秒錶示30秒)。默認狀況下,最大年齡設置爲15分鐘(15m)。
         僅當您設置disk = true參數時,此參數纔有效。
     

maxchunksize=size

 

 
 
        指定記錄中數據塊的最大大小(以字節爲單位)。附加k或K,以KB爲單位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB爲單位)。默認狀況下,數據塊的最大大小設置爲12 MB。
 
maxsize=size

 


 
 
        指定要爲默認記錄保留的磁盤數據的最大大小(以字節爲單位)。附加k或K,以KB爲單位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB爲單位)。默認狀況下,磁盤數據的最大大小不受限制,此參數設置爲0。
         僅當您設置disk = true參數時,此參數纔有效。
 

 
repository=path

 

 
 
        指定臨時磁盤存儲的存儲庫(目錄)。默認狀況下,使用系統的臨時目錄。
 

 
samplethreads={true|false}

 

 
 
        指定是否啓用線程採樣。僅當採樣事件與此參數一塊兒啓用時,纔會進行線程採樣。默認狀況下,啓用此參數。
 

settings=path

 

 
 
        指定事件設置文件的路徑和名稱(類型爲JFC)。默認狀況下,使用default.jfc文件,該文件位於JAVA_HOME / jre / lib / jfr中。
 

stackdepth=depth

 

 
 
        JFR的堆棧跟蹤堆棧深度。默認狀況下,深度設置爲64個方法調用。最大值爲2048,最小值爲1。
 

 
threadbuffersize=size

 

 
 
        指定每線程本地緩衝區大小(以字節爲單位)。附加k或K,以KB爲單位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB爲單位)。此參數的較高值容許更多數據收集而不會爭用將其刷新到全局存儲。它能夠在線程豐富的環境中增長應用程序佔用空間。默認狀況下,本地緩衝區大小設置爲5 KB。
        您能夠經過用逗號分隔多個參數的值來指定它們。例如,要指示JFR將連續記錄寫入磁盤,並將數據塊的最大大小設置爲10 MB,請指定如下內容:

-XX:FlightRecorderOptions=defaultrecording=true,disk=true,maxchunksize=10M
 
-XX:LargePageSizeInBytes=size
        在Solaris上,設置用於Java堆的大頁的最大大小(以字節爲單位)。 size參數必須是2的冪(2,4,8,16,...)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認狀況下,大小設置爲0,這意味着JVM會自動選擇大頁面的大小。
        如下示例說明如何將大頁面大小設置爲4兆字節(MB):
 

 
-XX:LargePageSizeInBytes=4m

 

 
 
 
-XX:MaxDirectMemorySize=size
        設置New I/O(java.nio包)直接緩衝區分配的最大總大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認狀況下,大小設置爲0,這意味着JVM會自動選擇NIO直接緩衝區分配的大小。
        如下示例說明如何以不一樣單位將NIO大小設置爲1024 KB:
 

-XX:MaxDirectMemorySize=1m
-XX:MaxDirectMemorySize=1024k
-XX:MaxDirectMemorySize=1048576

 

 
 
 
-XX:NativeMemoryTracking=mode
        指定用於跟蹤JVM本機內存使用狀況的模式。此選項的可能模式參數包括如下內容:
off
    不跟蹤JVM本機內存使用狀況。若是未指定-XX:NativeMemoryTracking選項,則這是默認行爲。
summary
    僅跟蹤JVM子系統的內存使用狀況,例如Java堆,類,代碼和線程。
detail
    除了跟蹤JVM子系統的內存使用狀況外,還能夠跟蹤各個CallSite,單個虛擬內存區域及其已提交區域的內存使用狀況。
 
-XX:ObjectAlignmentInBytes=alignment
        設置Java對象的內存對齊方式(以字節爲單位)。默認狀況下,該值設置爲8個字節。指定的值應爲2的冪,而且必須在8和256(含)的範圍內。此選項可使用具備大Java堆大小的壓縮指針。
        堆大小限制(以字節爲單位)計算以下:
 
4GB * ObjectAlignmentInBytes
 
        注意:隨着對齊值的增長,對象之間未使用的空間也會增長。所以,您可能沒有意識到使用具備大型Java堆大小的壓縮指針會帶來任何好處。
 
-XX:OnError=string
        設置自定義命令或一系列以分號分隔的命令,以便在發生不可恢復的錯誤時運行。若是字符串包含空格,則必須用引號括起來。
        如下示例顯示如何使用-XX:OnError選項運行userdump.exe實用程序,以便在出現沒法恢復的錯誤時獲取崩潰轉儲(%p指定當前進程):
 

-XX:OnError="userdump.exe %p"

 

 
 
        上面的示例假定在PATH環境變量中指定了userdump.exe實用程序的路徑。
 
-XX:OnOutOfMemoryError=string
        設置自定義命令或一系列以分號分隔的命令,以便在首次拋出OutOfMemoryError異常時運行。若是字符串包含空格,則必須用引號括起來。有關命令字符串的示例,請參閱-XX:OnError選項的說明。
 
-XX:+PerfDataSaveToFile
        若是啓用,則在Java應用程序退出時保存jstat(1)二進制數據。此二進制數據保存在名爲hsperfdata_ <pid>的文件中,其中<pid>是您運行的Java應用程序的進程標識符。使用jstat顯示此文件中包含的性能數據,以下所示:
 

jstat -class file:///<path>/hsperfdata_<pid>
jstat -gc file:///<path>/hsperfdata_<pid>

 

 
-XX:+PrintCommandLineFlags
        容許打印出如今命令行上的符合人體工程學選擇的JVM標誌。瞭解JVM設置的人體工程學值(例如堆空間大小和選定的垃圾收集器)可能頗有用。默認狀況下,禁用此選項而且不打印標誌。
 
-XX:+PrintNMTStatistics
        啓用本機內存跟蹤時,容許在JVM出口處打印收集的本機內存跟蹤數據(請參閱--XX:NativeMemoryTracking)。默認狀況下,禁用此選項而且不打印本機內存跟蹤數據。
 
-XX:+RelaxAccessControlCheck
        減小驗證程序中訪問控制檢查的數量。默認狀況下,此選項被禁用,對於具備最新字節碼版本的類,它將被忽略(即,視爲已禁用)。您能夠爲具備舊版字節碼的類啓用它。
 
-XX:+ResourceManagement
        在應用程序的運行時期間啓用資源管理。
        這是一項商業功能,須要您還指定 -XX:+UnlockCommercialFeatures 選項,以下所示:
 

java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement

 

 
 
 
-XX:ResourceManagementSampleInterval=value (milliseconds)
        設置控制資源管理測量的採樣間隔的參數,以毫秒爲單位。
        僅當啓用資源管理(即指定了 -XX:+ResourceManagement 選項)時,才能使用此選項。
 
-XX:SharedArchiveFile=path
        指定類數據共享(CDS)歸檔文件的路徑和名稱
 
-XX:SharedClassListFile=file_name
        指定包含要存儲在類數據共享(CDS)存檔中的類文件名稱的文本文件。此文件包含每行一個類文件的全名,斜槓(/)替換點(。)除外。例如,要指定類java.lang.Object和hello.Main,請建立一個包含如下兩行的文本文件:
 

 
java/lang/Object
hello/Main

 

 
 
        您在此文本文件中指定的類文件應包含應用程序經常使用的類。它們能夠包括應用程序,擴展或引導類路徑中的任何類。
 
-XX:+ShowMessageBoxOnError
        當JVM遇到沒法恢復的錯誤時,容許顯示對話框。這能夠防止JVM退出並使進程保持活動狀態,以便您能夠將調試器附加到它以調查錯誤緣由。默認狀況下,禁用此選項。
 
-XX:StartFlightRecording=parameter=value
        啓動Java應用程序的JFR記錄。這是一個與-XX:+UnlockCommercialFeatures選項配合使用的商業功能。此選項等同於在運行時期間啓動記錄的JFR.start診斷命令。您能夠在開始JFR錄製時設置如下參數:
compress={true|false}
    指定是否使用gzip文件壓縮實用程序壓縮磁盤上的JFR記錄日誌文件(JFR類型)。僅當指定了filename參數時,此參數纔有效。默認狀況下,它設置爲false(記錄未壓縮)。要啓用壓縮,請將參數設置爲true。
defaultrecording={true|false}
    指定錄製是連續背景錄製仍是在有限時間內運行。默認狀況下,此參數設置爲false(錄製在限定時間內運行)。要使錄製連續運行,請將參數設置爲true。
delay=time
    指定Java應用程序啓動時間和記錄開始之間的延遲。附加s以秒爲單位指定時間,m表示分鐘,h表示小時,d表示天(例如,指定10米表示10分鐘)。默認狀況下,沒有延遲,此參數設置爲0。
dumponexit={true|false}
    指定當JVM以受控方式終止時是否應生成JFR數據的轉儲文件。默認狀況下,此參數設置爲false(不會生成退出時的轉儲文件)。要啓用它,請將參數設置爲true。
    轉儲文件將寫入filename參數定義的位置。
    例:

-XX:StartFlightRecording=name=test,filename=D:\test.jfr,dumponexit=true
 

 

 
duration=time
    指定錄製的持續時間。附加s以秒爲單位指定時間,m表示分鐘,h表示小時,d表示天(例如,指定5h表示5小時)。默認狀況下,持續時間不受限制,此參數設置爲0。
filename=path
    指定JFR記錄日誌文件的路徑和名稱。
name=identifier
    指定JFR記錄的標識符。默認狀況下,它設置爲Recording x。
maxage=time
    指定要爲默認錄製保留的磁盤數據的最長期限。附加s指定以秒爲單位的時間,m表示分鐘,h表示小時,d表示天(例如,指定30秒錶示30秒)。默認狀況下,最大年齡設置爲15分鐘(15m)。
maxsize=size
    指定要爲默認記錄保留的磁盤數據的最大大小(以字節爲單位)。附加k或K,以KB爲單位指定大小,m或M指定大小(MB,g或G)以指定大小(以GB爲單位)。默認狀況下,磁盤數據的最大大小不受限制,此參數設置爲0。
settings=path
    指定事件設置文件的路徑和名稱(類型爲JFC)。默認狀況下,使用default.jfc文件,該文件位於JAVA_HOME / jre / lib / jfr中。
您能夠經過用逗號分隔多個參數的值來指定它們。例如,要將記錄保存到當前工做目錄中的test.jfr,並指示JFR壓縮日誌文件,請指定如下內容:
 

 
-XX:StartFlightRecording=filename=test.jfr,compress=true

 

 
 
 -XX:ThreadStackSize=size
        設置線程堆棧大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認值取決於虛擬內存。
        如下示例顯示如何以不一樣單位將線程堆棧大小設置爲1024 KB:
 

-XX:ThreadStackSize=1m
-XX:ThreadStackSize=1024k
-XX:ThreadStackSize=1048576
        此選項等效於-Xss。
 
-XX:+TraceClassLoading
        容許在加載類時跟蹤類。默認狀況下,禁用此選項而且不跟蹤類。
 
-XX:+TraceClassLoadingPreorder
        容許按引用順序跟蹤全部已加載的類。默認狀況下,禁用此選項而且不跟蹤類。
 
-XX:+TraceClassResolution
        容許跟蹤常量池分辨率。默認狀況下,禁用此選項
 
-XX:+TraceClassUnloading
        容許在卸載類時跟蹤類。默認狀況下,禁用此選項而且不跟蹤類。
 
-XX:+TraceLoaderConstraints
        容許跟蹤加載器約束記錄。默認狀況下,禁用此選項而且不跟蹤加載程序約束記錄。
 
-XX:+UnlockCommercialFeatures
        容許使用商業功能。商業功能包含在Oracle Java SE Advanced或Oracle Java SE Suite包中,如Java SE產品頁面上所定義,網址爲 http://www.oracle.com/technetwork/java/javase/terms/products/index.html 
        默認狀況下,此選項被禁用,JVM在沒有商業功能的狀況下運行。一旦爲JVM進程啓用了它們,就沒法禁用它們用於該進程。
        若是未提供此選項,則仍可以使用相應的jcmd診斷命令在正在運行的JVM中解鎖商業功能。
 
-XX:+UseAppCDS
        啓用應用程序類數據共享(AppCDS)。要使用AppCDS,還必須在CDS轉儲時間(請參閱-Xshare:dump選項)和應用程序運行時間期間指定選項-XX:SharedClassListFile和-XX:SharedArchiveFile的值。
        這是一項商業功能,須要您還指定-XX:+UnlockCommercialFeatures選項。這也是一個實驗性的特徵;它可能在未來的版本中發生變化
 
-XX:-UseBiasedLocking
        禁用使用偏置鎖定。一些具備大量無競爭同步的應用程序能夠在啓用此標誌的狀況下得到顯着的加速,而具備某些鎖定模式的應用程序可能會看到減速。有關偏置鎖定技術的更多信息,請參閱Java調優白皮書中的示例,網址爲 http://www.oracle.com/technetwork/java/tuning-139912.html#section4.2.5 
        默認狀況下,啓用此選項。
 
-XX:-UseCompressedOops
        禁用壓縮指針的使用。默認狀況下,啓用此選項,並在Java堆大小小於32 GB時使用壓縮指針。啓用此選項時, 對象引用表示爲32位偏移而不是64位指針,這一般會在運行Java堆大小小於32 GB的應用程序時提升性能。 此選項僅適用於64位JVM
        當Java堆大小大於32GB時,也可使用壓縮指針。請參見-XX:ObjectAlignmentInBytes選項。
 
-XX:+UseLargePages
        容許使用大頁面內存。默認狀況下,禁用此選項而且不使用大頁面內存。
 
-XX:+UseMembar
        容許在線程狀態轉換上發佈membars。默認狀況下,在除ARM服務器以外的全部平臺上都禁用此選項。 (建議您不要在ARM服務器上禁用此選項。)
 
-XX:+UsePerfData
        啓用perfdata功能。默認狀況下啓用此選項以容許JVM監視和性能測試。禁用它會禁止建立hsperfdata_userid目錄。要禁用perfdata功能,請指定-XX:-UsePerfData。
 
-XX:+AllowUserSignalHandlers
        容許應用程序安裝信號處理程序。默認狀況下,禁用此選項,而且不容許應用程序安裝信號處理程序。
 

高級JIT編譯器選項/Advanced JIT Compiler Options


這些選項控制Java HotSpot VM執行的動態即時(JIT)編譯。
 
-XX:+AggressiveOpts
        容許使用積極的性能優化功能,這些功能有望在即將發佈的版本中成爲默認功能。默認狀況下,禁用此選項而且不使用實驗性能功能。
 
-XX:AllocateInstancePrefetchLines=lines
        設置在實例分配指針以前預取的行數。默認狀況下,預取的行數設置爲1:
 
-XX:AllocateInstancePrefetchLines=1
        只有Java HotSpot Server VM支持此選項。
 
-XX:AllocatePrefetchDistance=size
        設置對象分配的預取距離的大小(以字節爲單位)。將從最後分配的對象的地址開始預取將要使用新對象的值寫入的內存。每一個Java線程都有本身的分配點。
        負值表示基於平臺選擇預取距離。正值是預取的字節數。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認值設置爲-1。
        如下示例顯示如何將預取距離設置爲1024字節:
 

-XX:AllocatePrefetchDistance=1024
        只有Java HotSpot Server VM支持此選項。
 
-XX:AllocatePrefetchInstr=instruction
        將預取指令設置爲在分配指針以前預取。只有Java HotSpot Server VM支持此選項。可能的值爲0到3.值後面的實際指令取決於平臺。默認狀況下,預取指令設置爲0:
 

-XX:AllocatePrefetchInstr=0
        只有Java HotSpot Server VM支持此選項。
 
-XX:AllocatePrefetchLines=lines
        使用編譯代碼中生成的預取指令設置在最後一次對象分配後要加載的高速緩存行數。若是最後分配的對象是實例,則默認值爲1;若是是數組,則默認值爲3。
        如下示例顯示如何將加載的緩存行數設置爲5:
 

-XX:AllocatePrefetchLines=5

 

 
        只有Java HotSpot Server VM支持此選項。
 
-XX:AllocatePrefetchStepSize=size
        設置順序預取指令的步長(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認狀況下,步長設置爲16個字節:
 

-XX:AllocatePrefetchStepSize=16

 

 
 
        只有Java HotSpot Server VM支持此選項。
 
-XX:AllocatePrefetchStyle=style
        爲預取指令設置生成的代碼樣式。 style參數是0到3之間的整數:
0
不要生成預取指令。
1
每次分配後執行預取指令。這是默認參數。
2
使用線程局部分配塊(TLAB)水印指針來肯定什麼時候執行預取指令
3
在SPARC上使用BIS指令進行分配預取。
        只有Java HotSpot Server VM支持此選項。
 
-XX:+BackgroundCompilation
啓用後臺編譯。 默認狀況下啓用此選項。 要禁用後臺編譯,請指定-XX:-BackgroundCompilation(這至關於指定-Xbatch)。
 
-XX:CICompilerCount=threads
設置用於編譯的編譯器線程數。 默認狀況下,服務器JVM的線程數設置爲2,客戶端JVM的線程數設置爲1,若是使用分層編譯,則會擴展爲核心數。 如下示例顯示如何將線程數設置爲2:
 

-XX:CICompilerCount=2

 

 
 
 
-XX:CodeCacheMinimumFreeSpace=size
  設置編譯所需的最小可用空間(以字節爲單位)。 附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。 當剩餘小於最小可用空間時,編譯中止。 默認狀況下,此選項設置爲500 KB。 如下示例顯示如何將最小可用空間設置爲1024 MB:
 
-XX:CodeCacheMinimumFreeSpace=1024m

 

 
 
-XX:CompileCommand=command,method[,option]
        指定要對方法執行的命令。例如,要從編譯中排除String類的indexOf()方法,請使用如下命令:
 
-XX:CompileCommand=exclude,java/lang/String.indexOf

 

 
 
    請注意,指定了完整的類名,包括用斜槓(/)分隔的全部包和子包。爲了便於剪切和粘貼操做,還可使用-XX:+PrintCompilation和-XX:+ LogCompilation選項生成的方法名稱格式:
 
-XX:CompileCommand=exclude,java.lang.String::indexOf

 

 
 
        若是在沒有簽名的狀況下指定方法,則該命令將應用於具備指定名稱的全部方法。可是,您也能夠在類文件格式中指定方法的簽名。在這種狀況下,您應該將參數括在引號中,不然shell會將分號視爲命令end。例如,若是要僅排除String類的indexOf(String)方法,請使用如下命令:
 

-XX:CompileCommand="exclude,java/lang/String.indexOf,(Ljava/lang/String;)I"

 

 
 
        您還可使用星號(*)做爲類和方法名稱的通配符。例如,要排除編譯全部類中的全部indexOf()方法,請使用如下命令:
 

 
-XX:CompileCommand=exclude,*.indexOf

 

 
 
        逗號和句點是空格的別名,使得經過shell傳遞編譯器命令更容易。您能夠經過將參數括在引號中,使用空格做爲分隔符將參數傳遞給-XX:CompileCommand:
 

-XX:CompileCommand="exclude java/lang/String indexOf"

 

 
        請注意,在使用-XX:CompileCommand選項解析在命令行上傳遞的命令以後,JIT編譯器會從.hotspot_compiler文件中讀取命令。您能夠向此文件添加命令,也可使用-XX:CompileCommandFile選項指定其餘文件。
        要添加多個命令,請屢次指定-XX:CompileCommand選項,或使用換行符分隔符(\ n)分隔每一個參數。可使用如下命令:
break
    在調試JVM時設置斷點,以便在編譯指定方法的開始時中止。
compileonly
除了指定的方法以外,從編譯中排除全部方法。做爲替代方法,您可使用-XX:CompileOnly選項,該選項容許指定多個方法。
dontinline
防止內聯指定的方法。
exclude
從編譯中排除指定的方法。
help
    打印-XX:CompileCommand選項的幫助消息。
inline
    嘗試內聯指定的方法。
log
    排除除指定方法以外的全部方法的編譯日誌記錄(使用-XX:+ LogCompilation選項)。默認狀況下,對全部已編譯的方法執行日誌記錄。
option
    此命令可用於將JIT編譯選項傳遞給指定的方法以代替最後一個參數(選項)。編譯選項在方法名稱後面的末尾設置。例如,要爲StringBuffer類的append()方法啓用BlockLayoutByFrequency選項,請使用如下命令:

-XX:CompileCommand=option,java/lang/StringBuffer.append,BlockLayoutByFrequency

 

 
    您能夠指定多個編譯選項,以逗號或空格分隔。
print
    在編譯指定方法後打印生成的彙編代碼。
quiet
不要打印編譯命令。默認狀況下,打印使用-XX:CompileCommand選項指定的命令;例如,若是從編譯中排除String類的indexOf()方法,則如下內容將打印到標準輸出:
 

CompilerOracle: exclude java/lang/String.indexOf

 

 
 
                    您能夠經過在其餘 -XX:CompileCommand選項以前指定-XX:CompileCommand=quiet 選項來抑制此操做。
 
-XX:CompileCommandFile=filename
        設置從中讀取JIT編譯器命令的文件。默認狀況下,.hotspot_compiler文件用於存儲JIT編譯器執行的命令。
        命令文件中的每一行表明一個命令,一個類名和一個使用該命令的方法名。例如,此行打印String類的toString()方法的彙編代碼:
 

 
print java/lang/String toString
        有關爲JIT編譯器指定要對方法執行的命令的更多信息,請參閱-XX:CompileCommand選項。
 
-XX:CompileOnly=methods
        設置應限制編譯的方法列表(以逗號分隔)。僅編譯指定的方法。使用完整的類名(包括包和子包)指定每一個方法。例如,要僅編譯String類的length()方法和List類的size()方法,請使用如下命令:
 
-XX:CompileOnly=java/lang/String.length,java/util/List.size

 

        請注意,指定了完整的類名,包括用斜槓(/)分隔的全部包和子包。爲了便於剪切和粘貼操做,還可使用-XX:+ PrintCompilation和-XX:+ LogCompilation選項生成的方法名稱格式:
 
-XX:CompileOnly=java.lang.String::length,java.util.List::size

 

 
 
        雖然不支持通配符,但您只能指定類或包名稱來編譯該類或包中的全部方法,而且只指定在任何類中使用此名稱編譯方法的方法:
 
-XX- :CompileOnly=java/lang/String
-XX:CompileOnly=java/lang
-XX:CompileOnly=.length

 

 
 
 
-XX:CompileThreshold=invocations
        設置編譯前解釋的方法調用的數量。默認狀況下,在服務器JVM中,JIT編譯器執行10,000次解釋方法調用以收集有效編譯的信息。對於客戶端JVM,默認設置爲1,500次調用。啓用分層編譯時,將忽略此選項;請參閱選項-XX:+ TieredCompilation。如下示例顯示如何將解釋的方法調用數設置爲5,000:
 

-XX:CompileThreshold=5000

 

 
 
        經過指定-Xcomp選項,能夠在編譯以前徹底禁用Java方法的解釋。
 
-XX:+DoEscapeAnalysis
        容許使用轉義分析。默認狀況下啓用此選項。要禁用轉義分析,請指定-XX:-DoEscapeAnalysis。只有Java HotSpot Server VM支持此選項。
 
-XX:InitialCodeCacheSize=size
        設置初始代碼高速緩存大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認值設置爲500 KB。初始代碼高速緩存大小應不小於系統的最小內存頁大小。如下示例顯示如何將初始代碼高速緩存大小設置爲32 KB:
 

-XX:InlineSmallCode=1000

 

 
 
-XX:+Inline
        啓用方法內聯。默認狀況下啓用此選項以提升性能。要禁用方法內聯,請指定-XX:-Inline。
 
-XX:InlineSmallCode=size
        爲編譯好的要內聯方法設置最大的code size,(以字節爲單位)。 附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。 只有內聯小於指定大小的編譯方法纔會被內聯。 默認狀況下,最大代碼大小設置爲1000字節:

-XX:InlineSmallCode=1000

 

 
 
 
-XX:+LogCompilation
        容許將編譯活動記錄到當前工做目錄中名爲hotspot.log的文件中。您可使用-XX:LogFile選項指定其餘日誌文件路徑和名稱。
        默認狀況下,禁用此選項而且不記錄編譯活動。 -XX:+ LogCompilation選項必須與解鎖診斷JVM選項的-XX:UnlockDiagnosticVMOptions選項一塊兒使用。
        每次使用-XX:+PrintCompilation選項編譯方法時,均可以啓用詳細診斷輸出,並在控制檯上打印一條消息。
 
-XX:MaxInlineSize=size
        設置要內聯的方法的最大字節碼大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認狀況下,最大字節碼大小設置爲35個字節:
 

-XX:MaxInlineSize=35

 

 
 
 
-XX:MaxNodeLimit=nodes
        設置單個方法編譯期間要使用的最大節點數。默認狀況下,最大節點數設置爲65,000:

   -XX:MaxNodeLimit = 65000

 

 
 
 
-XX:MaxTrivialSize=size
        設置要內聯的簡單方法的最大字節碼大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認狀況下,一個簡單方法的最大字節碼大小設置爲6個字節:
 

-XX:MaxTrivialSize = 6

 

 
 
-XX:+OptimizeStringConcat
        啓用字符串鏈接操做的優化。默認狀況下啓用此選項。要禁用字符串鏈接操做的優化,請指定-XX:-OptimizeStringConcat。只有Java HotSpot Server VM支持此選項。
 
-XX:+PrintAssembly
        經過使用外部disassembler.so庫,能夠爲字節編碼和本機方法打印彙編代碼。這使您能夠查看生成的代碼,這能夠幫助您診斷性能問題。
        默認狀況下,禁用此選項而且不打印彙編代碼。 -XX:+PrintAssembly選項必須與解鎖診斷JVM選項的-XX:UnlockDiagnosticVMOptions選項一塊兒使用。
 
-XX:+PrintCompilation
        每次編譯方法時,經過向控制檯打印消息,從JVM啓用詳細診斷輸出。這使您能夠查看實際編譯的方法。默認狀況下,禁用此選項而且不打印診斷輸出。
        您還可使用-XX:+LogCompilation選項將編譯活動記錄到文件中。
 
-XX:+PrintInlining
        容許打印內聯決策。這使您能夠查看哪些方法被內聯。
        默認狀況下,禁用此選項而且不打印內聯信息。-XX:+PrintInlining選項必須與解鎖診斷JVM選項的-XX:+UnlockDiagnosticVMOptions選項一塊兒使用。
 
-XX:ReservedCodeCacheSize=size
        設置JIT編譯代碼的最大代碼緩存大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。默認的最大代碼緩存大小爲240 MB;若是使用-XX:-TieredCompilation選項禁用分層編譯,則默認大小爲48 MB。此選項的限制爲2 GB;不然,會產生錯誤。最大代碼緩存大小不該小於初始代碼緩存大小;請參閱選項-XX:InitialCodeCacheSize。此選項等效於-Xmaxjitcodesize。
 
-XX:RTMAbortRatio=abort_ratio
        RTM停止比率指定爲全部已執行RTM事務的百分比(%)。若是許多停止事務變得大於此比率,則編譯後的代碼將被去優化。啓用-XX:+UseRTMDeopt選項時使用此比率。此選項的默認值爲50.這意味着若是50%的全部事務都被停止,則編譯後的代碼將被去優化。
 
-XX:RTMRetryCount=number_of_retries
        RTM鎖定代碼將在停止或忙碌時重試此選項指定的次數,而後再回退到正常鎖定機制。此選項的默認值爲5.必須啓用-XX:UseRTMLocking選項。
 
-XX:-TieredCompilation
        禁用分層編譯。默認狀況下,啓用此選項。只有Java HotSpot Server VM支持此選項。
 
-XX:+UseAES
        爲Intel,AMD和SPARC硬件啓用基於硬件的AES內在函數。 Intel Westmere(2010及更新版本),AMD Bulldozer(2011及更新版本)以及SPARC(T4及更新版本)均爲支持的硬件。 UseAES與UseAESIntrinsics一塊兒使用。
 
-XX:+UseAESIntrinsics
        默認狀況下啓用UseAES和UseAESIntrinsics標誌,僅支持Java HotSpot Server VM 32位和64位。 要禁用基於硬件的AES內在函數,請指定-XX:-UseAES -XX:-UseAESIntrinsics。 例如,要啓用硬件AES,請使用如下標誌:
 
-XX:+UseAES -XX:+UseAESIntrinsics

 

 
        要支持32位和64位的UseAES和UseAESIntrinsics標誌,請使用-server選項來選擇Java HotSpot Server VM。 客戶端VM不支持這些標誌。
 
-XX:+UseCodeCacheFlushing
        在關閉編譯器以前啓用刷新代碼緩存。默認狀況下啓用此選項。要在關閉編譯器以前禁用刷新代碼緩存,請指定-XX:-UseCodeCacheFlushing。
 
-XX:+UseCondCardMark
        在更新卡表以前,能夠檢查卡是否已經標記。默認狀況下禁用此選項,而且只應在具備多個套接字的計算機上使用此選項,從而提升嚴重依賴併發操做的Java應用程序的性能。只有Java HotSpot Server VM支持此選項。
 
-XX:+ UseRTMDeopt
        根據停止率自動調諧RTM鎖定。此比率由-XX:RTMAbortRatio選項指定。若是停止事務的數量超過停止率,則包含鎖定的方法將被取消優化並從新編譯,並將全部鎖定爲正常鎖定。默認狀況下禁用此選項。必須啓用-XX:+UseRTMLocking選項。
 
-XX:+UseRTMLocking
        爲全部膨脹的鎖生成受限制的事務性內存(RTM)鎖定代碼,使用正常的鎖定機制做爲回退處理程序。默認狀況下禁用此選項。與RTM相關的選項僅適用於支持事務同步擴展(TSX)的x86 CPU上的Java HotSpot Server VM。
        RTM是英特爾TSX的一部分,它是x86指令集擴展,有助於建立多線程應用程序。 RTM引入了新指令XBEGIN,XABORT,XEND和XTEST。 XBEGIN和XEND指令包含一組做爲事務運行的指令。若是在運行事務時未發現衝突,則會在XEND指令中一塊兒提交內存和寄存器修改。 XABORT指令可用於顯式停止事務,XEND指令用於檢查事務中是否正在運行一組指令。
        當另外一個線程嘗試訪問同一事務時,對事務的鎖定會膨脹,從而阻止最初未請求訪問該事務的線程。 RTM要求在事務停止或失敗時指定後備操做集。 RTM鎖是一種委託給TSX系統的鎖。
        RTM提升了在關鍵區域中具備低衝突的高競爭鎖的性能(這是不能同時由多個線程訪問的代碼)。 RTM還提升了粗粒度鎖定的性能,這在多線程應用程序中一般表現不佳。 (粗粒度鎖定是長時間保持鎖定以最小化獲取和釋放鎖定的開銷的策略,而細粒度鎖定是經過僅在必要時鎖定並儘快解鎖來嘗試實現最大並行性的策略。此外,對於不一樣線程使用的輕度爭用鎖,RTM能夠減小錯誤的緩存行共享,也稱爲緩存行乒乓。當來自不一樣處理器的多個線程訪問不一樣資源但資源共享同一緩存行時,會發生這種狀況。結果,處理器重複地使其餘處理器的高速緩存行無效,這迫使它們從主存儲器而不是它們的高速緩存讀取。
 
-XX:+UseSHA
        爲SPARC硬件啓用SHA加密散列函數的基於硬件的內在函數。 UseSHA與UseSHA1Intrinsics,UseSHA256Intrinsics和UseSHA512Intrinsics選項一塊兒使用。
        默認狀況下啓用UseSHA和UseSHA * Intrinsics標誌,而且僅對SPARC T4及更高版本上的Java HotSpot Server VM 64位支持。
        僅當使用sun.security.provider.Sun提供程序進行SHA操做時,此功能才適用。
        要禁用全部基於硬件的SHA內部函數,請指定-XX:+UseSHA。要僅禁用特定的SHA內在函數,請使用相應的相應選項。例如:-XX:+UseSHA256Intrinsics。
 
-XX:+UseSHA1Intrinsics
        爲SHA-1加密哈希函數啓用內在函數。
 
-XX:+ UseSHA256Intrinsics
        爲SHA-224和SHA-256加密哈希函數啓用內在函數。
 
-XX:+UseSHA512Intrinsics
        爲SHA-384和SHA-512加密散列函數啓用內在函數。
 
-XX:+ UseSuperWord
        容許將標量操做轉換爲超級字操做。默認狀況下啓用此選項。要禁用將標量操做轉換爲超級字操做,請指定-XX:+UseSuperWord。只有Java HotSpot Server VM支持此選項。
 

高級可維護選項/Advanced Serviceability Options


這些選項提供了收集系統信息和執行大量調試的功能。
 
-XX:+HeapDumpOnOutOfMemory
        當拋出java.lang.OutOfMemoryError異常時,經過使用堆分析器(HPROF)將Java堆轉儲到當前目錄中的文件。 您可使用-XX:HeapDumpPath選項顯式設置堆轉儲文件路徑和名稱。 默認狀況下,禁用此選項,並在拋出OutOfMemoryError異常時不轉儲堆。
 
-XX:HeapDumpPath=path
        設置在設置-XX:+ HeapDumpOnOutOfMemoryError選項時寫入堆分析器(HPROF)提供的堆轉儲的路徑和文件名。默認狀況下,該文件在當前工做目錄中建立,而且名爲java_pidpid.hprof,其中pid是致使錯誤的進程的標識符。如下示例顯示如何顯式設置默認文件(%p表示當前進程標識符):
 
-XX:HeapDumpPath=./java_pid%p.hprof

 

 
 
        如下示例顯示如何將堆轉儲文件設置爲C:/log/java/java_heapdump.log:
 
-XX:HeapDumpPath=C:/log/java/java_heapdump.log

 

 
 
 
-XX:LogFile=path
        設置寫入日誌數據的路徑和文件名。默認狀況下,該文件在當前工做目錄中建立,名爲hotspot.log。
        如下示例顯示如何將日誌文件設置爲C:/log/java/hotspot.log:
-XX:LogFile=C:/log/java/hotspot.log

 

 
 
 
-XX:+PrintClassHistogram
        在Control + Break事件以後啓用類實例直方圖的打印。默認狀況下,禁用此選項。
        設置此選項等同於運行jmap -histo命令或jcmd pid GC.class_histogram命令,其中pid是當前Java進程標識符。
 
-XX:+PrintConcurrentLockss
        在Control + Break事件以後啓用java.util.concurrent鎖的打印。默認狀況下,禁用此選項。
        設置此選項等同於運行jstack -l命令或jcmd pid Thread.print -l命令,其中pid是當前Java進程標識符。
 
-XX:+UnlockDiagnosticVMOptions
        解鎖用於診斷JVM的選項。默認狀況下,此選項已禁用,診斷選項不可用。
 

高級垃圾回收器選項/Advanced Garbage Collection Options


這些選項控制Java HotSpot VM如何執行垃圾收集(GC)。
 
-XX:+AggressiveHeap
        啓用Java堆優化。根據計算機的配置(RAM和CPU),這會將各類參數設置爲具備密集內存分配的長時間運行做業的最佳選擇。 默認狀況下,禁用該選項而且不優化堆
 
-XX:+AlwaysPreTouch
        在JVM初始化期間容許觸摸Java堆上的每一個頁面。這會在進入main()方法以前將全部頁面都放入內存中。該選項可用於測試以模擬長時間運行的系統,其中全部虛擬內存都映射到物理內存。
         默認狀況下,禁用此選項,並將全部頁面做爲JVM堆空間填充提交。
 
-XX:+CMSClassUnloadingEnabled
        使用併發標記清除( CMS)垃圾收集器時啓用類卸載。默認狀況下啓用此選項。要禁用CMS垃圾收集器的類卸載,請指定-XX:-CMSClassUnloadingEnabled。
 
-XX:CMSExpAvgFactor=percent
        設置在計算併發收集統計信息的指數平均值時用於加權當前樣本的時間百分比(0到100)。默認狀況下,指數平均值因子設置爲25%。如下示例顯示如何將因子設置爲15%:
 
-XX:CMSExpAvgFactor=15

 

 
-XX:CMSInitiatingOccupancyFraction=percent
        設置啓動CMS收集週期的舊代佔用率(0到100)的百分比。默認值設置爲-1。任何負值(包括默認值)都意味着-XX:CMSTriggerRatio用於定義初始佔用率的值。
        如下示例顯示如何將佔用率設置爲20%:
 
-XX:CMSInitiatingOccupancyFraction=20

 

 
 
-XX:+CMSScavengeBeforeRemark
        在CMS remark 步驟以前啓用清理嘗試。默認狀況下,禁用此選項。
 
-XX:CMSTriggerRatio=percent
        設置在CMS收集週期開始以前分配的-XX:MinHeapFreeRatio指定的值的百分比(0到100)。默認值設置爲80%。
        如下示例顯示如何將佔用率設置爲75%:
 
-XX:CMSTriggerRatio = 75

 

 
-XX:ConcGCThreads=threads
        設置用於併發GC的線程數。默認值取決於JVM可用的CPU數。
        例如,要將併發GC的線程數設置爲2,請指定如下選項:
 

-XX:ConcGCThreads = 2

 

 
 
-XX:+DisableExplicitGC
        啓用禁用處理對System.gc()的調用的選項。默認狀況下禁用此選項,這意味着將處理對System.gc()的調用。若是禁用對System.gc()的調用處理,則JVM仍會在必要時執行GC。
 
-XX:+ExplicitGCInvokesConcurrent
        容許使用System.gc()請求調用併發GC。
         默認狀況下禁用此選項,而且只能與-XX:+UseConcMarkSweepGC選項一塊兒啓用。
 
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
        經過在併發GC循環期間使用System.gc()請求和卸載類,能夠調用併發GC。默認狀況下禁用此選項,而且只能與-XX:+UseConcMarkSweepGC選項一塊兒啓用。
 
-XX:G1HeapRegionSize=size
        設置使用垃圾優先(G1)收集器時Java堆所細分的區域的大小。該值能夠介於1 MB和32 MB之間。默認區域大小根據堆大小以符合人體工程學的方式肯定。
        如下示例顯示如何將細分的大小設置爲16 MB:
 
-XX:G1HeapRegionSize=16m

 

 
 
-XX:+G1PrintHeapRegions
        容許打印有關哪些區域已分配以及哪些區域由G1收集器回收的信息。默認狀況下,禁用此選項。
 
-XX:G1ReservePercent=percent
        設置保留爲false上限的堆的百分比(0到50),以減小G1收集器升級失敗的可能性。
        默認狀況下,此選項設置爲10%。
        如下示例顯示如何將保留堆設置爲20%:
 
-XX:G1ReservePercent=20

 

 
 
 
-XX:InitialHeapSize=size
        設置內存分配池的初始大小(以字節爲單位)。該值必須爲0或1024的倍數且大於1 MB。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。根據系統配置在運行時選擇默認值。請參閱                  http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
上的Java SE HotSpot虛擬機垃圾收集調整指南中的「人機工程學」部分。
        如下示例顯示如何使用各類單位將分配的內存大小設置爲6 MB:
 

-XX:InitialHeapSize=6291456
-XX:InitialHeapSize=6144k
-XX:InitialHeapSize=6m

 

 
 
        若是將此選項設置爲0,則初始大小將設置爲爲舊代和年輕代分配的大小的總和。可使用-XX:NewSize選項設置年輕代的堆大小。
 
-XX:InitialSurvivorRatio=ratio
        設置吞吐量垃圾收集器使用的初始倖存者空間比率
        (由-XX:+UseParallelGC和/或-XX:+ UseParallelOldGC選項啓用)。
        默認狀況下,經過使用-XX:+ UseParallelGC和-XX:+UseParallelOldGC選項啓用自適應大小調整,並根據應用程序行爲調整倖存者空間,從初始值開始。
        若是禁用自適應大小調整(使用-XX:-UseAdaptiveSizePolicy選項),則應使用-XX:SurvivorRatio選項爲整個應用程序執行設置倖存者空間的大小。
        如下公式可用於根據年輕一代的大小(Y)和初始倖存者空間比率(R)計算倖存者空間(S)的初始大小:
 

S=Y/(R+2)

 

 
 
        等式中的2表示兩個倖存者空間。指定爲初始倖存者空間比的值越大,初始倖存者空間大小越小。
        默認狀況下,初始倖存者空間比率設置爲8.若是使用年輕代空間大小的默認值(2 MB),則倖存者空間的初始大小將爲0.2 MB。
        如下示例顯示如何將初始倖存者空間比率設置爲4:
 
-XX:InitialSurvivorRatio=4

 

 
 
-XX:InitiatingHeapOccupancyPercent=percent
        設置啓動併發GC循環的堆佔用百分比(0到100)。 它由垃圾收集器使用,它根據整個堆的佔用而觸發併發GC循環,而不只僅是其中一代(例如,G1垃圾收集器)。
        默認狀況下,初始值設置爲45%。 值0表示不間斷的GC循環。 如下示例顯示如何將啓動堆佔用率設置爲75%:

-XX:InitiatingHeapOccupancyPercent=75

 

 
-XX:MaxGCPauseMillis=time
        設置最大GC暫停時間的目標(以毫秒爲單位)。這是一個軟目標,JVM將盡最大努力實現它。
        默認狀況下,沒有最大暫停時間值。
        如下示例顯示如何將最大目標暫停時間設置爲500毫秒:
-XX:MaxGCPauseMillis=500

 

 
 
-XX:MaxHeapSize=size
        設置內存分配池的最大大小(以字節爲單位)。該值必須是1024的倍數且大於2 MB。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。根據系統配置在運行時選擇默認值。
        對於服務器部署,-XX:InitialHeapSize 和 -XX:MaxHeapSize一般設置爲相同的值。請參閱                http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
        上的Java SE HotSpot虛擬機垃圾收集調整指南中的「人機工程學」部分。
        如下示例顯示如何使用各類單位將分配的內存的最大容許大小設置爲80 MB:
 

-XX:MaxHeapSize=83886080
-XX:MaxHeapSize=81920k
-XX:MaxHeapSize=80m
        -XX:MaxHeapSize選項等效於-Xmx。
 
-XX:MaxHeapFreeRatio=percent
        設置GC事件後容許的最大空閒堆空間百分比(0到100)。若是可用堆空間擴展到此值以上,則堆將縮小。默認狀況下,此值設置爲70%。
        如下示例顯示如何將最大可用堆比率設置爲75%:
 
-XX:MaxHeapFreeRatio=75

 

 
 
-XX:MaxMetaspaceSize=size
        設置能夠爲類元數據分配的最大本機內存量。默認狀況下,大小不受限制。應用程序的元數據量取決於應用程序自己,其餘正在運行的應用程序以及系統上可用的內存量。
        如下示例顯示如何將最大類元數據大小設置爲256 MB:
 

-XX:MaxMetaspaceSize=256m
 
-XX:MaxNewSize=size
        設置年輕代的堆的最大大小(以字節爲單位)。默認值按人體工程學設置。
 
-XX:MaxTenuringThreshold=threshold
        設置自適應GC大小調整中使用的最大暫定閾值。
        最大值爲15.並行(吞吐量)收集器的默認值爲15
        CMS收集器的默認值爲6。
        如下示例顯示如何將最大期限閾值設置爲10:
-XX:MaxTenuringThreshold = 10

 

 
 
-XX:MetaspaceSize=size
        設置分配的類元數據空間的大小,該空間將在第一次超出時觸發垃圾回收。根據使用的元數據量,增長或減小垃圾收集的閾值。默認大小取決於平臺。
 
-XX:MinHeapFreeRatio=percent
        設置GC事件後容許的最小空閒堆空間百分比(0到100)。若是可用堆空間低於此值,則將擴展堆。默認狀況下,此值設置爲40%。
        如下示例顯示如何將最小可用堆比率設置爲25%:
 
-XX:MinHeapFreeRatio=25

 

 
 
 
-XX:NewRatio=ratio
        設置年輕和老一代尺寸之間的比率。默認狀況下,此選項設置爲2.如下示例顯示如何將年輕/舊比率設置爲1:
 
-XX:NewRatio=1

 

 
 
 
-XX:NewSize=size
        設置年輕代的堆的初始大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。
        堆的年輕代區域用於新對象。 GC在該區域比在其餘區域更頻繁地進行。若是年輕一代的規模過小,那麼將會執行大量的小型GC。若是尺寸太大,則只會執行完整的GC,這可能須要很長時間才能完成。 Oracle建議您將年輕代的大小保持在整個堆大小的一半到四分之一之間。
        如下示例顯示如何使用各類單位將年輕代的初始大小設置爲256 MB:
 

 
-XX:NewSize=256m
-XX:NewSize=262144k
-XX:NewSize=268435456
        -XX:NewSize選項等效於-Xmn。
 
-XX:ParallelGCThreads=threads
        設置用於年輕和老年代的並行垃圾收集的線程數。默認值取決於JVM可用的CPU數。
        例如,要將並行GC的線程數設置爲2,請指定如下選項:
 
-XX:ParallelGCThreads=2

 

 
-XX:+ParallelRefProcEnabled
        啓用並行參考處理。默認狀況下,禁用此選項。
 
-XX:+PrintAdaptiveSizePolicy
        容許打印有關自適應生成大小的信息。默認狀況下,禁用此選項。
 
-XX:+PrintGC
        容許在每一個GC上打印消息。默認狀況下,禁用此選項。
 
-XX:+ PrintGCApplicationConcurrentTime
        容許打印自上次暫停後通過的時間(例如,GC停頓)。默認狀況下,禁用此選項。
 
-XX:+ PrintGCApplicationStoppedTime
        容許打印暫停(例如,GC暫停)持續多長時間。默認狀況下,禁用此選項。
 
-XX:+PrintGCDateStamps
        容許在每一個GC上打印日期戳。默認狀況下,禁用此選項。
 
-XX:+PrintGCDetails
        容許在每一個GC上打印詳細消息。默認狀況下,禁用此選項。
 
-XX:+PrintGCTaskTimeStamps
        容許爲每一個GC工做線程任務打印時間戳。默認狀況下,禁用此選項。
 
-XX:+PrintGCTimeStamps
        容許在每一個GC上打印時間戳。默認狀況下,禁用此選項。
 
-XX:+ PrintStringDeduplicationStatistics
        打印詳細的重複數據刪除統計信息。默認狀況下,禁用此選項。
        請參閱-XX:+UseStringDeduplication選項。
 
-XX:+PrintTenuringDistribution
        容許打印終身年齡信息。如下是輸出的示例:

 指望的倖存者大小48286924字節,新閾值10(最多10)
- age 1: 28992024 bytes, 28992024 total
- age 2: 1366864 bytes, 30358888 total
- age 3: 1425912 bytes, 31784800 total
...
        1歲對象是最年輕的倖存者(它們是在以前的清除以後建立的,在最近的清除中倖存下來,並從伊甸園遷移到倖存者空間)。 
        2歲的物體在兩次清除中倖存下來(在第二次清除期間,它們被從一個倖存者空間複製到下一個倖存者空間)。等等。
        在前面的示例中,28 992 024個字節在一次清除中倖存,並從eden複製到倖存者空間,1 366 864個字節由2歲對象佔用,等等。每行中的第三個值是年齡n的對象的累積大小或減。
        默認狀況下,禁用此選項。
 
-XX:+ScavengeBeforeFullGC
        在每一個完整GC以前啓用年輕代的GC。默認狀況下啓用此選項。 Oracle建議您不要禁用它,由於在完整GC以前清除年輕代能夠減小從舊代空間到年輕代空間可到達的對象數。要在每一個完整GC以前禁用年輕代的GC,請指定-XX:-ScavengeBeforeFullGC。
 
-XX:SoftRefLRUPolicyMSPerMB=time
        設置軟件可訪問對象在上次引用後在堆上保持活動狀態的時間(以毫秒爲單位)。
        默認值是堆中每一個可用兆字節的生存期的一秒。 -XX:SoftRefLRUPolicyMSPerMB選項接受表示每兆字節當前堆大小(對於Java HotSpot客戶端VM)的毫秒數或最大可能堆大小(對於Java HotSpot Server VM)的整數值。這種差別意味着客戶端VM傾向於刷新軟引用而不是增長堆,而服務器VM傾向於增長堆而不是刷新軟引用。在後一種狀況下,-Xmx選項的值對軟引用的垃圾收集速度有顯着影響。
        如下示例顯示如何將值設置爲2.5秒:
 

-XX:SoftRefLRUPolicyMSPerMB = 2500

 

 
 
 
-XX:StringDeduplicationAgeThreshold=threshold
        達到指定年齡的字符串對象被視爲重複數據刪除的候選對象。對象的年齡是對垃圾收集存活多少次的度量。這有時被稱爲終身;請參閱-XX:+PrintTenuringDistribution選項。請注意,在達到此年齡以前提高到舊堆區域的String對象始終被視爲重複數據刪除的候選對象。此選項的默認值爲3.請參閱-XX:+ UseStringDeduplication選項。
 
-XX:SurvivorRatio=ratio
        設置伊甸園空間大小與倖存者空間大小之間的比率。默認狀況下,此選項設置爲8.如下示例顯示如何將eden / survivor空間比率設置爲4:
 
-XX:SurvivorRatio = 4

 

 
-XX:TargetSurvivorRatio=percent
        設置年輕垃圾收集後使用的倖存者空間(0到100)的所需百分比。默認狀況下,此選項設置爲50%。
        如下示例顯示如何將目標倖存者空間比率設置爲30%:
 
-XX:TargetSurvivorRatio=30

 

 
 
 
-XX:TLABSize=size
        設置線程局部分配緩衝區(TLAB)的初始大小(以字節爲單位)。附加字母k或K表示千字節,m或M表示兆字節,g或G表示千兆字節。若是此選項設置爲0,則JVM會自動選擇初始大小。
        如下示例顯示如何將初始TLAB大小設置爲512 KB:
 
-XX:TLABSize=512k

 

-XX:+UseAdaptiveSizePolicy
        容許使用自適應生成大小。默認狀況下啓用此選項。
        要禁用自適應生成大小調整,請指定-XX:-UseAdaptiveSizePolicy並顯式設置內存分配池的大小(請參閱-XX:SurvivorRatio選項)。
 
-XX:+UseCMSInitiatingOccupancyOnly
        容許使用佔用值做爲啓動CMS收集器的惟一標準。默認狀況下,此選項已禁用,可能會使用其餘條件。
 
-XX:+UseConcMarkSweepGC
        容許爲舊一代使用CMS垃圾收集器。 Oracle建議您在吞吐量(-XX:+UseParallelGC)垃圾收集器沒法知足應用程序延遲要求時使用CMS垃圾收集器。 G1垃圾收集器(-XX:+UseG1GC)是另外一種選擇。
        默認狀況下,禁用此選項,並根據計算機的配置和JVM的類型自動選擇收集器。
        啓用此選項後,將自動設置-XX:+ UseParNewGC選項,您不該禁用它,
        由於JDK 8中不推薦使用如下選項組合:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC。
 
-XX:+ UseG1GC
        容許使用垃圾優先(G1)垃圾收集器。它是一個服務器式垃圾收集器, 針對具備大量RAM的多處理器機器。它以高几率知足GC暫停時間目標,同時保持良好的吞吐量。 G1收集器推薦用於須要大堆(大小約爲6 GB或更大)且GC延遲要求有限的應用(穩定且可預測的暫停時間低於0.5秒)
        默認狀況下,禁用此選項,並根據計算機的配置和JVM的類型自動選擇收集器。
 
-XX:+ UseGCOverheadLimit
        容許使用策略來限制在引起OutOfMemoryError異常以前JVM在GC上花費的時間比例。默認狀況下,此選項處於啓用狀態,若是超過98%的總時間用於垃圾回收而且回收的堆少於2%,並行GC將拋出OutOfMemoryError。當堆很小時,此功能可用於防止應用程序長時間運行,幾乎沒有進展。
        要禁用此選項,請指定-XX:-UseGCOverheadLimit。
 
-XX:+ UseNUMA
        經過增長應用程序對低延遲內存的使用,在具備非均勻內存架構(NUMA)的計算機上實現應用程序的性能優化。默認狀況下,此選項被禁用,而且不會對NUMA進行優化。
        該選項僅在使用並行垃圾收集器時可用(-XX:+UseParallelGC)。
 
-XX:+UseParallelGC
        容許使用並行清除垃圾收集器(也稱爲吞吐量收集器),經過利用多個處理器來提升應用程序的性能。
        默認狀況下,禁用此選項,並根據計算機的配置和JVM的類型自動選擇收集器。
        若是已啓用,則會自動啓用-XX:+ UseParallelOldGC選項,除非您明確禁用它。
 
-XX:+UseParallelOldGC
        容許將並行垃圾收集器用於完整的GC。默認狀況下,禁用此選項。
        啓用它會自動啓用-XX:+UseParallelGC選項。
 
-XX:+ UseParNewGC
        容許在年輕一代中使用並行線程進行收集。默認狀況下,禁用此選項。
        設置-XX:+UseConcMarkSweepGC選項時會自動啓用它。在JDK 8中不使用-XX:+ UseParNewGC選項而不使用-XX:+UseConcMarkSweepGC選項。
 
-XX:+UseSerialGC
        容許使用串行垃圾收集器。對於不須要垃圾收集的任何特殊功能的小型和簡單應用程序,這一般是最佳選擇。默認狀況下,禁用此選項,並根據計算機的配置和JVM的類型自動選擇收集器。
 
-XX:+ UseStringDeduplication
        啓用字符串重複數據刪除。 默認狀況下,禁用此選項。 要使用此選項,必須啓用垃圾優先(G1)垃圾收集器。 請參閱-XX:+UseG1GC選項。
        字符串重複數據刪除經過利用許多String對象相同的事實減小了Java堆上String對象的內存佔用。 而不是每一個String對象指向它本身的字符數組,相同的String對象能夠指向並共享相同的字符數組。
 
-XX:+UseTLAB
        容許在年輕代空間中使用線程局部分配塊(TLAB)。 默認狀況下啓用此選項。 
        要禁用TLAB,請指定-XX:-UseTLAB。
 

已啓用和移除的選項/Deprecated and Removed Options


這些選項包含在以前的版本中,但後來被認爲是沒必要要的。
 
-Xincgc
        啓用增量垃圾收集。此選項在JDK 8中已棄用,無需替換。
 
-Xrunlibname
        加載指定的調試/分析庫。此選項已被-agentlib選項取代。
 
-XX:CMSIncrementalDutyCycle=percent
        設置容許併發收集器運行的次要集合之間的時間百分比(0到100)。
        在棄用-XX:+CMSIncrementalMode選項後,此選項在JDK 8中已棄用,沒有替換。
 
-XX:CMSIncrementalDutyCycleMin=percent
        設置次要集合之間的時間百分比(0到100),它是-XX:+CMSIncrementalPacing啓用時佔空比的下限。
        在棄用-XX:+ CMSIncrementalMode選項後,此選項在JDK 8中已棄用,沒有替換。
 
-XX:+ CMSIncrementalMode
        啓用CMS收集器的增量模式。此選項在JDK 8中已棄用,沒有替換,以及以CMSIncremental開頭的其餘選項。
 
-XX:CMSIncrementalOffset=percent
        設置增量模式佔空比在次要集合之間的時間段內向右移動的時間百分比(0到100)。
        在棄用-XX:+ CMSIncrementalMode選項後,此選項在JDK 8中已棄用,沒有替換。
 
-XX:+ CMSIncrementalPacing
        根據JVM運行時收集的統計信息,啓用增量模式佔空比的自動調整。
        在棄用-XX:+CMSIncrementalMode選項後,此選項在JDK 8中已棄用,沒有替換。
 
-XX:CMSIncrementalSafetyFactor=percent
        設置計算佔空比時用於添加保守性的時間百分比(0到100)。
        在棄用-XX:+ CMSIncrementalMode選項後,此選項在JDK 8中已棄用,沒有替換。
 
-XX:CMSInitiatingPermOccupancyFraction=percent
        設置啓動GC的永久生成佔用率(0到100)的百分比。此選項在JDK 8中已棄用,無需替換。
 
-XX:MaxPermSize=size
        設置最大永久生成空間大小(以字節爲單位)。
        此選項在JDK 8中已棄用,並由-XX:MaxMetaspaceSize選項取代。
 
-XX:PermSize=size
        設置分配給永久生成的空間(以字節爲單位),若是超出則會觸發垃圾回收。
        此選項在JDK 8中已棄用,並被-XX:MetaspaceSize選項取代。
 
-XX:+UseSplitVerifier
        容許拆分驗證過程。默認狀況下,此選項在先前版本中已啓用,驗證分爲兩個階段:類型引用(由編譯器執行)和類型檢查(由JVM運行時執行)。此選項在JDK 8中已棄用,如今默認狀況下會對驗證進行拆分,而沒法將其禁用。
 
-XX:+UseStringCache
        啓用經常使用分配字符串的緩存。此選項已從JDK 8中刪除,無需替換。
 

性能調優示例/Performance Tuning Examples


如下示例顯示如何使用實驗性調整標誌來優化吞吐量或提供較低的響應時間。
 
    案例一:調整更高的吞吐量

java -d64 -server -XX:+AggressiveOpts -XX:+UseLargePages -Xmn10g  -Xms26g -Xmx26g
    案例二:調整較低的響應時間

java -d64 -XX:+UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis=500 -XX:+PrintGCTimeStamp

 

 
 

Lager Pages


            Also known as huge pages, large pages are memory pages that are significantly larger than the standard memory page size (which varies depending on the processor and operating system). Large pages optimize processor Translation-Lookaside Buffers.
         也稱爲huge pages, Large pages是顯著大於標準 memory pages大小的 memory page(根據處理器和操做系統而變化)。 Large pages優化處理器Translation-Lookaside Buffers。
 
         A Translation-Lookaside Buffer (TLB) is a page translation cache that holds the most-recently used virtual-to-physical address translations. TLB is a scarce system resource. A TLB miss can be costly as the processor must then read from the hierarchical page table, which may require multiple memory accesses. By using a larger memory page size, a single TLB entry can represent a larger memory range. There will be less pressure on TLB, and memory-intensive applications may have better performance.
        Translation-Lookaside Buffer(TLB)是一種 page 轉換緩存,它保存最近使用的虛擬到物理地址轉換。 TLB是一種稀缺的系統資源。 TLB未命中多是昂貴的,由於處理器必須從分層  page 表讀取,這可能須要屢次存儲器訪問。經過使用更大的內存頁面大小,單個TLB條目能夠表示更大的內存範圍。 TLB的壓力會減小,內存密集型應用程序可能會有更好的性能。
 
         However, large pages page memory can negatively affect system performance. For example, when a large mount of memory is pinned by an application, it may create a shortage of regular memory and cause excessive paging in other applications and slow down the entire system. Also, a system that has been up for a long time could produce excessive fragmentation, which could make it impossible to reserve enough large page memory. When this happens, either the OS or JVM reverts to using regular pages.
        可是, large pages的page memory會對系統性能產生負面影響。例如,當應用程序固定大量內存時,可能會致使常規內存不足並致使其餘應用程序中的分頁過多,從而下降整個系統的速度。此外,長時間運行的系統可能會產生過多的碎片,這可能致使沒法保留足夠大的 page memory。發生這種狀況時,OS或JVM將恢復使用常規頁面。
 

Large Pages Support

    只有Windows Server 2003支持Lager pages。 要使用此功能,管理員必須首先爲將運行該應用程序的用戶分配其餘權限:
1.Select Control Panel -> Administrative Tools -> Local Security Policy.
2.Select Local Policies -> User Rights Assignment.
3.Double click Lock pages in memory; add users and/or groups.
4.Reboot your system.
 
請注意,即便是將要運行應用程序的管理員,也須要執行這些步驟,由於管理員默認狀況下沒有權限將頁面鎖定在內存中。
 
 

Application Class Data Sharing


        應用程序類數據共享(AppCDS)擴展了CDS(請參閱 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html  )以啓用標準擴展目錄中的類( 由系統屬性java.ext.dirs指定;請參閱 https://docs.oracle.com/javase/8/docs/technotes/guides/extensions/spec.html  )和應用程序類路徑(請參閱「設置類路徑」) 「)放在共享檔案中。 若是從應用程序類路徑加載大量類,AppCDS能夠減小佔用空間並減小應用程序的啓動時間。
        這是一項商業功能,須要您還指定-XX:+ UnlockCommercialFeatures選項。 這也是一個實驗性的特徵; 它可能在未來的版本中發生變化
 

建立共享存檔文件,並使用它運行應用程序

        如下步驟建立一個共享存檔文件,其中包含test.Hello應用程序使用的全部類。最後一步使用共享存檔文件運行應用程序。
        1.建立test.Hello應用程序使用的全部類的列表。如下命令建立一個名爲hello.classlist的文件,其中包含此應用程序使用的全部類的列表:
 
java -Xshare:off -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp hello.jar test.Hello

 

 
 
        請注意,-cp參數必須僅包含JAR文件; -XX:+ UseAppCDS選項不支持包含目錄名的類路徑。
 
    2.建立一個名爲hello.jsa的共享存檔,其中包含hello.classlist中的全部類:
 
java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar
 

 

 
        請注意,在建立存檔時使用的-cp參數必須與運行時使用的-cp的(或前綴)相同。
 
    3.使用共享存檔hello.jsa運行應用程序test.Hello:
 
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hello
 
        確保已指定選項-Xshare:on或-Xshare:auto。
 
    4.驗證test.Hello應用程序是否正在使用hello.jsa共享存檔中包含的類:
 
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar -verbose:class test.Hello

 

 
 
        此命令的輸出應包含如下文本:
Loaded test.Hello from shared objects file by sun/misc/Launcher$AppClassLoader
 
 

跨多個應用程序進程共享共享存檔

        你能夠跨多個具備徹底相同類路徑的應用程序進程共享相同的存檔文件,或者共享公共類路徑前綴。這樣能夠減小內存使用量,由於歸檔內存映射到進程的地址空間。操做系統自動共享這些進程的只讀頁面。
        如下步驟建立了Hello和Hi均可以使用的共享存檔。
        1.建立Hello應用程序使用的全部類的列表以及Hi應用程序的另外一個列表:
 

java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp common.jar:hello.jar Hello
 
java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hi.classlist -XX:+UseAppCDS -cp common.jar:hi.jar Hi

 

 
 
        請注意,由於Hello和Hi應用程序共享一個公共類路徑前綴(它們的兩個類路徑都以common.jar開頭),因此這兩個應用程序能夠共享一個共享的歸檔文件。
 
        2.建立將共享共享存檔文件的全部應用程序使用的單個類列表。
        如下命令將文件hello.classlist和hi.classlist組合到一個文件common.classlist中:
type hello.classlist hi.classlist > common.classlist

 

 
 
        3.建立一個名爲common.jsa的共享存檔,其中包含common.classlist中的全部類:
 

java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -XX:SharedClassListFile=common.classlist -cp common.jar

 

 
        -cp參數的值是Hello和Hi應用程序共享的公共類路徑前綴。
 
        4.使用相同的共享存檔運行Hello和Hi應用程序:
 

 
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hello.jar Hello
 
java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hi.jar Hi

 

 
 
 

退出狀態

        當使用錯誤的參數,嚴重錯誤或JVM拋出的異常調用啓動程序時,啓動程序一般會返回如下退出值。可是,Java應用程序能夠選擇使用API調用System.exit(exitValue)返回任何值。值是:
        0:成功完成
        > 0:發生錯誤
相關文章
相關標籤/搜索