原地址:http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
java [ options ] classname [ args ]
java [ options ] -jar filename [ args ]
- classname 要啟動的類的名稱。
-
filename 將要調用的Java Archive(JAR)文件的名稱。僅與
-jar選項一起使用。
-
args 遞給
main()方法的參數, 由空格分隔。
描述
該java命令啟動Java應用程序。它通過啟動Java運行時環境(JRE),加載指定的類,並調用該類的main()方法來實現。該方法必須聲明為public和static,它不能返回任何值,它必須接受String數組作為參數。方法聲明具有以下形式:
public static void main(String [] args)
該java命令可用於通過加載具有main()方法或擴展的類來啟動JavaFX應用程序javafx.application.Application。在后一種情況下,啟動器構造Application類的實例,調用其init()方法,然后調用該start(javafx.stage.Stage)方法。
默認情況下,不是java命令選項的第一個參數是要調用的類的完全限定名稱。如果指定了該-jar選項,則其參數是包含應用程序的類和資源文件的JAR文件的名稱。啟動類必須由Main-Class源代碼中的清單頭指示。
JRE在三組位置中搜索啟動類(以及應用程序使用的其他類):引導類路徑,已安裝的擴展和用戶的類路徑。
類文件名或JAR文件名后的參數傳遞給該main()方法。
選項
該java命令支持多種選項,可分為以下幾類:
Java虛擬機(JVM)的所有實現都保證支持標准選項。它們用於常見操作,例如檢查JRE的版本,設置類路徑,啟用詳細輸出等。
非標准選項是特定於Java HotSpot Virtual Machine的通用選項,因此不能保證所有JVM實現都支持,並且可能會發生更改。這些選項以-X。
高級選項不建議隨意使用。這些是用於調整Java HotSpot Virtual Machine操作的特定區域的開發人員選項,這些操作通常具有特定的系統要求,並且可能需要對系統配置參數進行特權訪問。它們也不能保證被所有JVM實現所支持,並且可能會發生變化。高級選項以-XX。
要跟蹤在最新版本中已棄用或刪除的選項,在文檔末尾有一個名為Deprecated和Removed Options的部分。
布爾選項用於啟用默認情況下禁用的功能或禁用默認啟用的功能。這樣的選項不需要參數。-XX使用加號(-XX:+OptionName)啟用布爾選項,並使用減號(-XX:-OptionName)禁用布爾選項。
對於需要參數的選項,參數可以通過空格,冒號(:)或等號(=)與選項名稱分開,或者參數可以直接跟隨選項(每個選項的確切語法不同) )。如果您希望指定大小(以字節為單位),則可以使用無后綴,或使用后綴k或K千字節(KB)m或M兆字節(MB)g或G千兆字節(GB)。例如,設置大小為8 GB,您可以指定8g,8192m,8388608k,或8589934592作為參數。如果您希望指定百分比,請使用0到1之間的數字(例如,指定0.2525%)。
標准選項
這些是JVM的所有實現都支持的最常用的選項。
-agentlib: libname [= options ]-
加載指定的本機代理庫。在庫名稱之后,可以使用逗號分隔的庫的特定選項列表。
如果指定了該選項
-agentlib:foo,則JVM將嘗試加載libfoo.so由LD_LIBRARY_PATH系統變量指定的位置(在OS X此變量上DYLD_LIBRARY_PATH)中命名的庫。以下示例顯示如何加載堆分析工具(HPROF)庫,並每20 ms獲取采樣CPU信息,堆棧深度為3:
-agentlib:hprof=cpu=samples,interval=20,depth=3
以下示例顯示如何加載Java Debug Wire Protocol(JDWP)庫並偵聽端口8000上的套接字連接,在加載主類之前掛起JVM:
-agentlib:jdwp=transport=dt_socket,server=y,address=8000
有關本地代理程序庫的更多信息,請參閱以下內容:
-
將
java.lang.instrument在包描述http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html -
JVM Tools界面指南中的代理命令行選項
http://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#starting
-
- -agentpath: pathname [= options ]
-
加載絕對路徑名指定的本地代理程序庫。此選項相當於
-agentlib但使用庫的完整路徑和文件名。 - -client
-
選擇Java HotSpot Client VM。64位版本的Java SE開發工具包(JDK)目前忽略此選項,而是使用服務器JVM。
對於默認JVM選擇,請參閱“Server-Class Machine detection”
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html - -Dproperty=value
-
設置系統屬性值。該屬性變量是沒有空格表示屬性的名稱的字符串。的值變量是表示屬性的值的字符串。如果value是帶空格的字符串,則將其括在引號中(例如
-Dfoo="foo bar")。 - -d32
-
在32位環境中運行應用程序。如果未安裝或不支持32位環境,則會報告錯誤。默認情況下,應用程序在32位環境中運行,除非使用64位系統。
- -d64
-
在64位環境中運行應用程序。如果未安裝或不支持64位環境,則會報告錯誤。默認情況下,應用程序在32位環境中運行,除非使用64位系統。
目前只有Java HotSpot Server VM支持64位操作,並且使用該
-server選項是隱含的-d64。該-client選項被忽略使用-d64。這在將來的版本中可能會發生變化。 - -disableassertions [:[ packagename ] ... |: classname ]
- -da [:[ packagename ] ... |: classname ]
-
禁用斷言。默認情況下,所有包和類中的斷言都被禁用。
沒有參數,
-disableassertions(-da)禁用所有包和類中的斷言。當packagename參數結束時...,交換機將禁用指定的包和任何子包中的斷言。如果參數簡單...,則交換機將禁用當前工作目錄中未命名的包中的斷言。使用classname參數,交換機將禁用指定類中的斷言。在
-disableassertions(-da)選項適用於所有的類加載器和系統類(其中沒有一個類加載器)。此規則有一個例外:如果該選項沒有參數,那么它不適用於系統類。這使得除系統類之外的所有類中禁用斷言變得容易。該-disablesystemassertions選項使您能夠在所有系統類中禁用斷言。要在特定包或類中顯式啟用斷言,請使用
-enableassertions(-ea)選項。這兩個選項可以同時使用。例如,要MyClass在程序包com.wombat.fruitbat(和任何子包中)啟用斷言並在類com.wombat.fruitbat.Brickbat中禁用的情況下運行應用程序,請使用以下命令:java -ea:com.wombat.fruitbat ... -da:com.wombat.fruitbat.Brickbat MyClass
- -disablesystemassertions
- -dsa
-
禁用所有系統類中的斷言。
- -enableassertions [:[ packagename ] ... |: classname ]
- -ea [:[ packagename ] ... |: classname ]
-
啟用斷言。默認情況下,所有包和類中的斷言都被禁用。
沒有參數,
-enableassertions(-ea)可以在所有包和類中使用斷言。在packagename參數結束后...,交換機將在指定的包和任何子包中啟用斷言。如果參數簡單...,則交換機將在當前工作目錄中的未命名程序包中啟用斷言。使用classname參數,交換機將在指定的類中啟用斷言。在
-enableassertions(-ea)選項適用於所有的類加載器和系統類(其中沒有一個類加載器)。此規則有一個例外:如果該選項沒有參數,那么它不適用於系統類。這使得在除系統類之外的所有類中啟用斷言變得容易。該-enablesystemassertions選項提供單獨的開關,以在所有系統類中啟用斷言。要明確禁用特定包或類中的斷言,請使用
-disableassertions(-da)選項。如果單個命令包含這些交換機的多個實例,則在加載任何類之前,它們將按順序處理。例如,要使用MyClass僅在包com.wombat.fruitbat(和任何子包)中啟用但在類com.wombat.fruitbat.Brickbat中禁用的斷言來運行應用程序,請使用以下命令:java -ea:com.wombat.fruitbat ... -da:com.wombat.fruitbat.Brickbat MyClass
- -enablesystemassertions
- -esa
-
在所有系統類中啟用斷言。
- -help
- -?
-
顯示該
java命令的使用信息,而不實際運行JVM。 - -jar filename
-
執行封裝在JAR文件中的程序。該文件名參數是與包含在形成一條線的清單JAR文件的名稱
Main-Class:classname,定義與類public static void main(String[] args)充當應用程序的出發點方法。使用該
-jar選項時,指定的JAR文件是所有用戶類的源,其他類路徑設置將被忽略。有關JAR文件的更多信息,請參閱以下資源:
-
Java Archive(JAR)文件指南
http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html
-
Lession:Packaging Programs in JAR Files at
http://docs.oracle.com/javase/tutorial/deployment/jar/index.html
-
- -javaagent: jarpath [= options ]
-
加載指定的Java編程語言代理。有關測試Java應用程序的更多信息,請參閱
java.lang.instrumentJava API文檔中的軟件包描述http://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html - -jre-restrict-search
-
在版本搜索中包含用戶私有JRE。
- -no-JRE-restrict-search
-
從版本搜索中排除用戶私有JRE。
- -server
-
選擇Java HotSpot Server VM。64位版本的JDK僅支持Server VM,因此在該情況下該選項是隱式的。
對於默認JVM選擇,see Server-Class Machine Deltection at
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html - -showversion
-
顯示版本信息並繼續執行應用程序。此選項等同於該
-version選項,除了后者指示JVM在顯示版本信息后退出。 - -splash: imgname
-
顯示與由指定的圖像閃屏imgname。例如,要在啟動應用程序時從
splash.gif目錄顯示文件images,請使用以下選項:-splash:images/splash.gif
- -verbose:class
-
顯示有關每個加載類的信息。
- -verbose:GC
-
顯示有關每個垃圾收集(GC)事件的信息。
- -verbose:JNI
-
顯示有關使用本地方法和其他Java Native Interface(JNI)活動的信息。
- -version
-
顯示版本信息,然后退出。此選項等同於該
-showversion選項,除了后者在顯示版本信息后不指示JVM退出。 - -version: release
-
指定用於運行應用程序的發行版本。如果
java調用的命令的版本不符合此規范,並在系統上找到適當的實現,則將使用適當的實現。該版本參數指定任何確切的版本字符串,或版本字符串,用空格分隔范圍的列表。甲版本字符串是在以下形式的版本號的顯影劑代號:
1.X.0_ù(其中X是主版本號,並且Ü是更新版本號)。甲版本范圍是由一個版本字符串后跟一個加號的(+)來指定該版本或更高版本,或版本字符串后跟一個星號(的一部分*)來指定任何版本字符串具有匹配前綴。版本字符串和范圍可以使用邏輯或組合的空格進行組合,或兩個版本字符串/范圍&的邏輯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 Virtual Machine特有的通用選項。
-X顯示所有可用-X選項的幫助。
禁用后台編譯。默認情況下,JVM將該方法作為后台任務進行編譯,在解釋器模式下運行該方法,直到后台編譯完成。該-Xbatch標志禁用背景編譯,以便所有方法的編譯作為前台任務進行,直到完成。
此選項相當於-XX:-BackgroundCompilation。
指定由冒號(:)分隔的目錄,JAR文件和ZIP存檔列表,以搜索引導類文件。這些用於代替JDK中包含的引導類文件。
不要部署使用此選項覆蓋類的應用程序rt.jar,因為這違反了JRE二進制代碼許可證。
指定由冒號(:)分隔的目錄,JAR文件和ZIP存檔列表,以附加到默認引導類路徑的末尾。
不要部署使用此選項覆蓋類的應用程序rt.jar,因為這違反了JRE二進制代碼許可證。
指定以冒號(:)分隔的目錄,JAR文件和ZIP存檔列表,以前置到默認引導類路徑的前端。
不要部署使用此選項覆蓋類的應用程序rt.jar,因為這違反了JRE二進制代碼許可證。
對Java Native Interface(JNI)函數執行其他檢查。具體來說,它在處理JNI請求之前驗證傳遞給JNI函數和運行時環境數據的參數。遇到的任何無效數據表示本地代碼中存在問題,並且在這種情況下,JVM將以不可恢復的錯誤終止。使用此選項時,可能會降低性能。
-Xcomp強制匯編首次調用方法。默認情況下,客戶端VM(-client)執行1,000個解釋方法調用,並且服務器VM(-server)執行10,000個解釋方法調用以收集信息以進行高效編譯。指定該-Xcomp選項將禁用解釋性方法調用以犧牲效率來提高編譯性能。
您還可以使用該-XX:CompileThreshold選項在編譯之前更改解釋方法調用的數量。
什么也沒做。提供向后兼容性。
-Xdiag顯示其他診斷消息。
-Xfuture啟用嚴格的類文件格式檢查,強制實現與類文件格式規范的緊密一致。鼓勵開發人員在開發新代碼時使用此標志,因為在未來的版本中,更嚴格的檢查將成為默認值。
-Xint以僅解釋模式運行應用程序。編譯到本地代碼是禁用的,所有的字節碼都由解釋器執行。此模式中不存在即時(JIT)編譯器提供的性能優勢。
-Xinternalversion顯示比該-version選項更詳細的JVM版本信息,然后退出。
將要重定向的詳細GC事件信息的文件設置為記錄。寫入此文件的信息與-verbose:gc每個記錄事件之前的第一個GC事件所經過的時間的輸出類似。如果兩者都使用相同的命令,該-Xloggc選項將覆蓋。-verbose:gcjava
例:
-Xloggc:垃圾collection.log-Xmaxjitcodesize = size
指定JIT編譯代碼的最大代碼高速緩存大小(以字節為單位)。附加信件k或K指示千字節,m或M指示兆字節,g或G表示千兆字節。默認的最大代碼緩存大小為240 MB; 如果您使用該選項禁用分層編譯-XX:-TieredCompilation,則默認大小為48 MB:
-Xmaxjitcodesize =240米
此選項相當於-XX:ReservedCodeCacheSize。
由解釋器執行所有字節碼,除了熱方法,它們被編譯為本地代碼。
-Xmn sizek或
K結尾,則表示千字節,
m或
M指示兆字節,
g或
G表示千兆字節。
堆的年輕代區域用於新對象。GC在這個地區比其他地區更頻繁地進行。如果年輕代的規模太小,那么將會執行大量的minor garbage。如果太大,那么只會執行full garbage,但是需要很長時間才能完成。Oracle建議您將年輕代的大小保持在整個堆大小的一半到四分之一之間。
以下示例顯示如何使用各種單位將年輕代的初始和最大大小設置為256MB:
-Xmn256m -Xmn262144k -Xmn268435456
而不是-Xmn為年輕代-XX:NewSize設置堆的初始和最大大小的選項,您可以使用設置初始大小和-XX:MaxNewSize設置最大大小。
設置堆的初始大小(以字節為單位)。該值必須是1024和大於1 MB的倍數。如果以k或K結尾表示千字節,m或M指示兆字節,g或G表示千兆字節。
以下示例將分配的內存大小設置為6MB(三種方式均可):
-Xms6291456 -Xms6144k -Xms6m
如果您不設置此選項,則初始大小將被設置為為老年代和年輕代分配的大小的總和。可以使用-Xmn選項或-XX:NewSize選項設置年輕代的堆的初始大小。
-
指定JVM最大的可用(堆)內存(以字節為單位),以字節為單位。此值必須是1024和大於2 MB的倍數。如果以
k或K結尾表示千字節,m或M指示兆字節,g或G表示千兆字節。默認值是基於系統配置在運行時選擇的。對於服務器部署,-Xms並且-Xmx通常設置為相同的值。見一節“人體工程學” 的Java SE HotSpot虛擬機垃圾收集調優指南的http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html。以下示例將分配的內存的最大允許大小設置為80MB:
-Xmx83886080 -Xmx81920k -Xmx80m
該
-Xmx選項相當於-XX:MaxHeapSize。JVM最大的可用內存 = 年輕代大小 + 年老代大小 + 持久代大小
- -Xnoclassgc
-
禁用類的垃圾收集(GC)。這可以節省一些GC時間,這縮短了應用程序運行期間的中斷。
當您
-Xnoclassgc在啟動時指定時,應用程序中的類對象將在GC期間保持不變,並始終被視為實時的。這可能導致更多的內存被永久占用,如果不小心使用,將會丟失內存異常。 - -Xprof
-
配置運行程序並將配置文件數據發送到標准輸出。該選項作為在程序開發中有用的實用程序提供,不用於生產系統。
- -Xrs
-
減少JVM使用操作系統信號。
關閉掛鈎可以通過在關機時運行用戶清理代碼(如關閉數據庫連接)來有序地關閉Java應用程序,即使JVM突然終止。
JVM捕獲信號以實現意外終止的關閉掛鈎。JVM使用
SIGHUP,SIGINT並SIGTERM啟動關閉掛鈎的運行。JVM使用類似的機制實現轉儲線程堆棧的功能以進行調試。JVM用於
SIGQUIT執行線程轉儲。嵌入JVM的應用程序經常需要捕獲諸如
SIGINT或者SIGTERM可能導致對JVM信號處理程序的干擾的信號。該-Xrs選項可用於解決此問題。當-Xrs被使用時,用於信號掩模SIGINT,SIGTERM,SIGHUP,和SIGQUIT不被JVM改變,並且對於這些信號的信號處理程序沒有安裝。有兩個后果指定
-Xrs:-
SIGQUIT線程轉儲不可用。 -
例如,
System.exit()當JVM要終止時,用戶代碼負責關閉掛鈎的運行。
-
- -Xshare: mode
-
設置類數據共享(CDS)模式。此選項的可能模式參數包括以下內容:
- auto
-
盡可能使用CDS。這是Java HotSpot 32位客戶端虛擬機的默認值。
- on
-
需要使用CDS。如果不能使用類數據共享,則打印錯誤消息並退出。
- off
-
不要使用CDS。這是Java HotSpot 32位服務器虛擬機,Java HotSpot 64位客戶端虛擬機和Java HotSpot 64位服務器虛擬機的默認值。
- dump
-
手動生成CDS存檔。按照“設置類路徑”中所述指定應用程序類路徑。
您應該使用每個新的JDK版本重新生成CDS存檔。
- -XshowSettings: category
-
顯示設置並繼續。此選項的可能類別參數包括以下內容:
- all
-
顯示所有類別的設置。這是默認值。
- locale
-
顯示與區域設置相關的設置。
- properties
-
顯示與系統屬性相關的設置。
- vm
-
顯示JVM的設置。
- -Xss size
-
設置線程堆棧大小(以字節為單位)。
k或K指示KB,m或M指示MB,g或G指示GB。默認值取決於平台:-
Linux / ARM(32位):320 KB
-
Linux / i386(32位):320 KB
-
Linux / x64(64位):1024 KB
-
OS X(64位):1024 KB
-
Oracle Solaris / i386(32位):320 KB
-
Oracle Solaris / x64(64位):1024 KB
以下示例將線程堆棧大小設置為1024 KB不同的單位:
-Xss1m -Xss1024k -Xss1048576
此選項相當於
-XX:ThreadStackSize。 -
- -Xusealtsigs
-
使用替代信號,而不是
SIGUSR1和SIGUSR2對JVM內部信號。此選項相當於-XX:+UseAltSigs。 - -Xverify: model
-
設置字節碼驗證器的模式。字節碼驗證確保類文件正確形成,並滿足Java虛擬機規范中列出的約束 ; 見4.10節“
class文件驗證”:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.10在運行動態生成的或不可信的類文件時,不要關閉驗證,因為這樣可以減少Java提供的保護,從而使錯誤形式的字節碼的診斷更加困難。
此選項的可能模式參數包括以下內容:
- remote
驗證引導類加載器未加載的所有字節碼。這是默認行為。
- all
啟用對所有字節碼的驗證。
- none
禁用對所有字節碼的驗證。
高級運行時選項
這些選項控制Java HotSpot VM的運行時行為。
啟用該選項,以防止該java命令運行Java應用程序,如果它使用已批准的標准超馳機制或擴展機制。此選項通過檢查以下內容來檢查應用程序是否正在使用這些機制之一:
-
該屬性
java.ext.dirs或java.endorsed.dirs系統屬性已設置。 -
該
lib/endorsed目錄存在且不為空。 -
該
lib/ext目錄包含除了JDK之外的任何JAR文件。 -
系統范圍的平台特定擴展目錄包含任何JAR文件。
啟用禁用允許工具附加到JVM的機制的選項。默認情況下,該選項被禁用,這意味着連接機制啟用,您可以使用工具,例如jcmd,jstack,jmap,和jinfo。
指定發生不可恢復錯誤時寫入錯誤數據的路徑和文件名。默認情況下,此文件在當前工作目錄中創建並命名為hs_err_pidpid.log,其中pid是導致錯誤的進程的標識符。以下示例顯示如何設置默認日志文件(請注意,進程的標識符被指定為%p):
-XX:ErrorFile=/hs_err_pid%p.log
以下示例顯示如何將錯誤日志設置為/var/log/java/java_error.log:
-XX:ErrorFile= /var/log/ JAVA / java_error.log
如果無法在指定的目錄中創建文件(由於空間不足,權限問題或其他問題),則該文件將在操作系統的臨時目錄中創建。臨時目錄是/tmp。
當新的類型檢查程序失敗時,啟用對舊驗證程序的自動故障切換。默認情況下,此選項被禁用,並且對於具有最近的字節碼版本的類,它被忽略(即被視為禁用)。您可以將其用於具有舊版本的字節碼的類。
-XX:+ FlightRecorder允許在應用程序運行時使用Java Flight Recorder(JFR)。這是一個商業功能,與以下-XX:+UnlockCommercialFeatures選項配合使用:
java -XX:+ UnlockCommercialFeatures -XX:+ FlightRecorder
如果未提供此選項,則仍可以通過提供相應的jcmd診斷命令,在運行的JVM中啟用Java Flight Recorder 。
在應用程序的運行期間禁用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。 - dumponexit = {true|false}
-
指定當JVM以受控的方式終止時是否應生成JFR數據的轉儲文件。默認情況下,此參數設置為
false(不退出轉儲文件)。要啟用它,請將參數設置為true,並設置defaultrecording=true。轉儲文件被寫入由
dumponexitpath參數定義的位置。 - dumponexitpath = path
-
指定當JVM以受控方式退出時創建的JFR數據的轉儲文件的路徑和名稱,如果設置
dumponexit=true參數。設置路徑只有在您設置時才有意義defaultrecording=true。如果指定的路徑是目錄,則JVM會分配一個顯示創建日期和時間的文件名。如果指定的路徑包含一個文件名,如果該文件已經存在,JVM將通過將日期和時間戳記附加到指定的文件名來創建一個新文件。
- globalbuffersize = size
-
指定用於數據保留的主內存(以字節為單位)的總量。追加
k或K到指定KB大小,m或M以MB為單位指定大小,g或G到指定GB的大小。默認情況下,大小設置為462848字節。 - 日志等級= {quiet|error|warning|info|debug|trace}
-
指定通過JFR寫入日志文件的數據量。默認設置為
info。 - maxage = time
-
指定要保留默認錄制的磁盤數據的最大時間。追加
s以秒m為單位指定時間,分鍾,h數小時或d天數(例如,指定30s30秒)。默認情況下,最大年齡設置為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,磁盤= TRUE,maxchunksize = 10M-XX:LargePageSizeInBytes = size
在Solaris上,設置用於Java堆的大頁面的最大大小(以字節為單位)。的尺寸參數必須是2的冪(2,4,8,16,...)。附加信件k或K指示千字節,m或M指示兆字節,g或G表示千兆字節。默認情況下,大小設置為0,這意味着JVM自動選擇大頁面的大小。
以下示例說明如何將大頁面大小設置為4兆字節(MB):
-XX:LargePageSizeInBytes =4米-XX:MaxDirectMemorySize = size
設置新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,個別虛擬內存區域及其承諾區域的內存使用情況。
設置Java對象的內存對齊方式(以字節為單位)。默認情況下,該值設置為8個字節。指定值應為2的冪,並且必須在8和256(含)范圍內。此選項使得可以使用具有大Java堆大小的壓縮指針。
堆大小限制(以字節為單位)計算為:
4GB * ObjectAlignmentInBytes
注意:隨着對齊值的增加,對象之間的未使用空間也將增加。因此,您可能無法從使用具有大型Java堆大小的壓縮指針獲得任何好處。
-XX:OnError = string設置自定義命令或一系列分號分隔的命令,以在不可恢復的錯誤發生時運行。如果字符串包含空格,則必須用引號括起來。
以下示例顯示了如何使用該-XX:OnError選項來運行gcore命令來創建核心映像,並且調試器在不可恢復的錯誤(%p指定當前進程)的情況下開始附加到進程):
-XX:OnError =“gcore%p; dbx - %p”-XX:OnOutOfMemoryError = string
設置一個自定義命令或一系列分號分隔的命令,以便在OutOfMemoryError首次拋出異常時運行。如果字符串包含空格,則必須用引號括起來。有關命令字符串的示例,請參閱-XX:OnError選項的說明。
-
保存
jstat(1)二進制數據。這個二進制數據保存在一個名為的文件中hsperfdata_<pid>,其中<pid>是您運行的Java應用程序的進程標識符。使用jstat如下顯示包含在該文件中的性能數據:jstat -class文件:/// <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)歸檔中的類文件的名稱的文本文件。該文件包含每行一個類文件的全名,除了斜杠(
/)替換dots(.)。例如,要指定類java.lang.Object,並hello.Main創建一個包含以下兩行的文本文件:java / lang / Object 你好/主
您在此文本文件中指定的類文件應包括應用程序通常使用的類。它們可以包括來自應用程序,擴展或引導類路徑的任何類。
- -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天數(例如,指定10m10分鍾)。默認情況下,沒有延遲,此參數設置為0。 - dumponexit = {true|false}
-
指定當JVM以受控的方式終止時是否應生成JFR數據的轉儲文件。默認情況下,此參數設置為
false(不退出轉儲文件)。要啟用它,請將參數設置為true。轉儲文件被寫入由
filename參數定義的位置。例:
-XX:StartFlightRecording =名=測試中,文件名= D:\ test.jfr,dumponexit =真
- duration=time
-
指定錄像的持續時間。追加
s指定時間(以秒m為單位),分鍾,h小時或d天數(例如,指定5h5小時)。默認情況下,持續時間不受限制,此參數設置為0。 - filename=path
-
指定JFR記錄日志文件的路徑和名稱。
- name =identifier
-
指定JFR記錄的標識符。默認設置為
Recording x。 - maxage =time
-
指定要保留默認錄制的磁盤數據的最大時間。追加
s以秒m為單位指定時間,分鍾,h數小時或d天數(例如,指定30s30秒)。默認情況下,最大年齡設置為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 =文件名= test.jfr,壓縮= TRUE
- -XX:ThreadStackSize = size
-
設置線程堆棧大小(以字節為單位)。附加信件
k或K指示千字節,m或M指示兆字節,g或G表示千兆字節。默認值取決於平台:-
Linux / ARM(32位):320 KB
-
Linux / i386(32位):320 KB
-
Linux / x64(64位):1024 KB
-
OS X(64位):1024 KB
-
Oracle Solaris / i386(32位):320 KB
-
Oracle Solaris / x64(64位):1024 KB
以下示例顯示如何將線程堆棧大小設置為1024 KB的不同單位:
-XX:ThreadStackSize = 1m -XX:ThreadStackSize = 1024k -XX:ThreadStackSize = 1048576
此選項相當於
-Xss。 -
- -XX:+ TraceClassLoading
-
在加載類時啟用跟蹤。默認情況下,此選項被禁用,並且沒有跟蹤類。
- -XX:+ TraceClassLoadingPreorder
-
啟用所有加載類的跟蹤,以引用它們的順序。默認情況下,此選項被禁用,並且沒有跟蹤類。
- -XX:+ TraceClassResolution
-
啟用跟蹤常量池分辨率。默認情況下,禁用此選項,並且不跟蹤常量池分辨率。
- -XX:+ TraceClassUnloading
-
啟用在卸載時跟蹤類。默認情況下,此選項被禁用,並且沒有跟蹤類。
- -XX:+ TraceLoaderConstraints
-
啟用跟蹤加載器約束記錄。默認情況下,禁用此選項,並且不跟蹤加載器約束記錄。
- -XX:+ UnlockCommercialFeatures
-
使用商業功能。Java SE產品頁面上定義的Oracle Java SE Advanced或Oracle Java SE Suite軟件包附帶了商業功能
http://www.oracle.com/technetwork/java/javase/terms/products/index.html默認情況下,此選項被禁用,JVM運行時沒有商業功能。一旦啟用了JVM進程,就不可能禁用該進程的使用。
如果未提供此選項,則通過使用相應的
jcmd診斷命令,仍可以在正在運行的JVM中解除商業功能。 - -XX:+ UseAltSigs
-
使得能夠使用替代信號,而不是
SIGUSR1和SIGUSR2用於JVM內部信號。默認情況下,禁用此選項,不使用替代信號。此選項相當於-Xusealtsigs。 - -XX:+ UseAppCDS
-
啟用應用程序類數據共享(AppCDS)。要使用AppCDS,還必須為選項
-XX:SharedClassListFile和-XX:SharedArchiveFileCDS轉儲時間(見選項-Xshare:dump)和應用程序運行時間指定值。這是一個商業功能,需要您同時指定該
-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:+ UseHugeTLBFS
-
Linux的這個選項等同於指定
-XX:+UseLargePages。默認情況下禁用此選項。當選擇內存時,此選項將預先分配所有大頁面; 因此JVM不能動態增長或縮小大頁面內存區域; 看看-XX:UseTransparentHugePages你是否想要這個行為。有關詳細信息,請參閱“大頁面”。
- -XX:+ UseLargePages
-
啟用大頁面內存的使用。默認情況下,禁用此選項,不使用大頁面內存。
有關詳細信息,請參閱“大頁面”。
- -XX:+ UseMembar
-
允許在線程狀態轉換上發布膜。默認情況下,該選項在除ARM服務器之外的所有平台上都被禁用,這些平台已啟用。(建議您不要在ARM服務器上禁用此選項。)
- -XX:+ UsePerfData
-
啟用該
perfdata功能。此選項默認啟用以允許JVM監視和性能測試。禁用它可以禁止創建hsperfdata_userid目錄。要禁用該perfdata功能,請指定-XX:-UsePerfData。 - -XX:+ UseTransparentHugePages
-
在Linux上,可以使用可以動態增長或縮小的大頁面。默認情況下禁用此選項。您可能會遇到性能問題與透明巨大的頁面,因為操作系統移動其他頁面創建巨大的頁面; 此選項可用於實驗。
有關詳細信息,請參閱“大頁面”。
- -XX:+ AllowUserSignalHandlers
-
允許應用程序安裝信號處理程序。默認情況下,此選項被禁用,並且應用程序不允許安裝信號處理程序。
高級JIT編譯器選項
這些選項控制由Java HotSpot VM執行的動態即時(JIT)編譯。
- -XX:+ AggressiveOpts
-
可以使用積極的性能優化功能,預計在即將發布的版本中將會成為默認的性能優化功能。默認情況下,此選項被禁用,並且不使用實驗性能功能。
- -XX:AllocateInstancePrefetchLines = 行
-
設置在實例分配指針之前預取的行數。默認情況下,預取行數設置為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 = 指令
-
將預取指令設置為在分配指針之前進行預取。只有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
-
為預取指令設置生成的代碼樣式。的風格參數是從0至3的整數:
- 0 不生成預取指令。
- 1 每次分配后執行預取指令。這是默認參數。
- 2 使用線程本地分配塊(TLAB)水印指針來確定何時執行預取指令。
- 3 在SPARC上使用BIS指令進行分配預取。
只有Java HotSpot Server VM支持此選項。
- -XX:+ BackgroundCompilation
-
啟用后台編譯。默認情況下啟用此選項。要禁用后台編譯,請指定
-XX:-BackgroundCompilation(這等同於指定-Xbatch)。 - -XX:CICompilerCount = 線程
-
設置用於編譯的編譯器線程數。默認情況下,服務器JVM的線程數設置為2,對於客戶機JVM,線程數設置為1,如果使用分層編譯,則將其縮放為核心數。以下示例顯示如何將線程數設置為2:
-XX:CICompilerCount = 2
- -XX:CodeCacheMinimumFreeSpace = size
-
設置編譯所需的最小可用空間(以字節為單位)。附加信件
k或K指示千字節,m或M指示兆字節,g或G表示千兆字節。當小於最小可用空間時,編譯停止。默認情況下,此選項設置為500 KB。以下示例顯示如何將最小可用空間設置為1024 MB:-XX:CodeCacheMinimumFreeSpace =1024米
- -XX:CompileCommand = command, method [, option ]
-
指定一個方法執行的命令。例如,要排除該類的
indexOf()方法String被編譯,請使用以下命令:-XX:CompileCommand =exclude,java/lang/String.indexOf
請注意,指定了完整的類名稱,包括用slash(
/)分隔的所有包和子包。為了便於剪切和粘貼操作,還可以使用由產生的方法名稱格式-XX:+PrintCompilation和-XX:+LogCompilation選項:-XX:CompileCommand =exclude,java.lang.String::indexOf
如果在沒有簽名的情況下指定了該方法,則該命令將應用於具有指定名稱的所有方法。但是,您也可以以類文件格式指定方法的簽名。在這種情況下,您應該將參數括在引號中,否則shell將分號作為命令結束。例如,如果要僅排除該類的
indexOf(String)方法String被編譯,請使用以下命令:-XX:CompileCommand = “exclude,java/lang/String.indexOf,(Ljava /lang/String;)I”
您也可以使用星號(*)作為類和方法名稱的通配符。例如,要排除所有
indexOf()類中的所有方法被編譯,請使用以下命令:-XX:CompileCommand =eclcude,*.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編譯選項傳遞給指定的方法,代替最后一個參數(選項)。編譯選項設置在方法名后面。例如,要啟用該類
BlockLayoutByFrequency的append()方法的選項StringBuffer,請使用以下命令:-XX:CompileCommand =選項,爪哇/郎/的StringBuffer.append,BlockLayoutByFrequency
您可以指定多個編譯選項,用逗號或空格分隔。
-
在編譯指定的方法后打印生成的匯編代碼。
- quiet
-
不要打印編譯命令。默認情況下,使用 -
XX:CompileCommand選項指定的命令被打印出來; 例如,如果您從編譯中排除該類的indexOf()方法String,則以下將打印到標准輸出:CompilerOracle:排除java / lang / String.indexOf
您可以通過
-XX:CompileCommand=quiet在其他選項之前指定該選項來禁止此-XX:CompileCommand操作。
- -XX:CompileCommandFile = filename
-
設置讀取JIT編譯器命令的文件。默認情況下,該
.hotspot_compiler文件用於存儲JIT編譯器執行的命令。命令文件中的每一行表示使用該命令的命令,類名稱和方法名稱。例如,此行打印類的
toString()方法的匯編代碼String:打印java / lang / String toString
有關指定JIT編譯器在方法上執行的命令的更多信息,請參閱
-XX:CompileCommand選項。 - -XX:CompileOnly =methods
-
設置應限制編譯的方法列表(以逗號分隔)。只有指定的方法將被編譯。使用完整的類名(包括包和子包)指定每個方法。例如,為了僅編譯
length()所述的方法String類和size()所述的方法List類,使用以下:-XX:CompileOnly =java/lang/ string.length,java/util/List.size
請注意,指定了完整的類名稱,包括用slash(
/)分隔的所有包和子包。為了便於剪切和粘貼操作,還可以使用由產生的方法名稱格式-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:InitialCodeCacheSize = 32K
- -XX:+內嵌
-
啟用方法內聯。此選項默認啟用以提高性能。要禁用方法內聯,請指定
-XX:-Inline。 - -XX:InlineSmallCode = size
-
設置應該內聯的編譯方法的最大代碼大小(以字節為單位)。附加信件
k或K指示千字節,m或M指示兆字節,g或G表示千兆字節。只有尺寸小於指定大小的編譯方法才會被內聯。默認情況下,最大代碼大小設置為1000字節:-XX:InlineSmallCode = 1000
- -XX:+ LogCompilation
-
將編譯活動記錄到
hotspot.log當前工作目錄中命名的文件中。您可以使用該-XX:LogFile選項指定其他日志文件路徑和名稱。默認情況下,禁用此選項,並且不記錄編譯活動。該
-XX:+LogCompilation選項必須與-XX:UnlockDiagnosticVMOptions解鎖診斷JVM選項的選項一起使用。每次使用該
-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
-
實現級聯
String操作的優化。默認情況下啟用此選項。要禁用級聯String操作的優化,請指定-XX:-OptimizeStringConcat。只有Java HotSpot Server VM支持此選項。 - -XX:+ PrintAssembly
-
通過使用外部
disassembler.so庫來啟用字節碼和本機方法的匯編代碼的打印。這使您可以看到生成的代碼,這可能有助於您診斷性能問題。默認情況下,禁用此選項,並且未打印匯編代碼。該
-XX:+PrintAssembly選項必須與-XX:UnlockDiagnosticVMOptions解鎖診斷JVM選項的選項一起使用。 - -XX:+ PrintCompilation
-
每次編譯方法時,通過將消息打印到控制台,啟用來自JVM的詳細診斷輸出。這使您可以看到實際編譯的方法。默認情況下,禁用此選項,並且不打印診斷輸出。
您還可以使用該
-XX:+LogCompilation選項將編譯活動記錄到文件。 - -XX:+ PrintInlining
-
啟用內聯決定的打印。這使您可以看到哪些方法內聯。
默認情況下禁用此選項,並且不打印內聯信息。該
-XX:+PrintInlining選項必須與-XX:+UnlockDiagnosticVMOptions解鎖診斷JVM選項的選項一起使用。 - -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標志默認情況下啟用,僅支持32位和64位Java HotSpot Server VM。要禁用基於硬件的AES內在函數,請指定
-XX:-UseAES -XX:-UseAESIntrinsics。例如,要啟用硬件AES,請使用以下標志:-XX:+ UseAES -XX:+ UseAESIntrinsics
要支持UseAES和UseAESIntrinsics標志用於32位和64位使用
-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
-
Enables hardware-based intrinsics for SHA crypto hash functions for SPARC hardware.
UseSHAis used in conjunction with theUseSHA1Intrinsics,UseSHA256Intrinsics, andUseSHA512Intrinsicsoptions.The
UseSHAandUseSHA*Intrinsicsflags are enabled by default, and are supported only for Java HotSpot Server VM 64-bit on SPARC T4 and newer.This feature is only applicable when using the
sun.security.provider.Sunprovider for SHA operations.To disable all hardware-based SHA intrinsics, specify
-XX:-UseSHA. To disable only a particular SHA intrinsic, use the appropriate corresponding option. For example:-XX:-UseSHA256Intrinsics. - -XX:+UseSHA1Intrinsics
-
Enables intrinsics for SHA-1 crypto hash function.
- -XX:+UseSHA256Intrinsics
-
Enables intrinsics for SHA-224 and SHA-256 crypto hash functions.
- -XX:+UseSHA512Intrinsics
-
Enables intrinsics for SHA-384 and SHA-512 crypto hash functions.
- -XX:+UseSuperWord
-
Enables the transformation of scalar operations into superword operations. This option is enabled by default. To disable the transformation of scalar operations into superword operations, specify
-XX:-UseSuperWord. Only the Java HotSpot Server VM supports this option.
Advanced Serviceability Options
These options provide the ability to gather system information and perform extensive debugging.
- -XX:+ExtendedDTraceProbes
-
Enables additional
dtracetool probes that impact the performance. By default, this option is disabled anddtraceperforms only standard probes. - -XX:+HeapDumpOnOutOfMemory
-
Enables the dumping of the Java heap to a file in the current directory by using the heap profiler (HPROF) when a
java.lang.OutOfMemoryErrorexception is thrown. You can explicitly set the heap dump file path and name using the-XX:HeapDumpPathoption. By default, this option is disabled and the heap is not dumped when anOutOfMemoryErrorexception is thrown. - -XX:HeapDumpPath= path
-
Sets the path and file name for writing the heap dump provided by the heap profiler (HPROF) when the
-XX:+HeapDumpOnOutOfMemoryErroroption is set. By default, the file is created in the current working directory, and it is namedjava_pidpid.hprofwhere pid is the identifier of the process that caused the error. The following example shows how to set the default file explicitly (%prepresents the current process identificator):-XX:HeapDumpPath=./java_pid%p.hprof
The following example shows how to set the heap dump file to
/var/log/java/java_heapdump.hprof:-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
- -XX:LogFile= path
-
Sets the path and file name where log data is written. By default, the file is created in the current working directory, and it is named
hotspot.log.The following example shows how to set the log file to
/var/log/java/hotspot.log:-XX:LogFile=/var/log/java/hotspot.log
- -XX:+PrintClassHistogram
-
Enables printing of a class instance histogram after a
Control+Cevent (SIGTERM). By default, this option is disabled.Setting this option is equivalent to running the
jmap -histocommand, or thejcmdpidGC.class_histogramcommand, where pid is the current Java process identifier. - -XX:+PrintConcurrentLocks
-
Enables printing of
java.util.concurrentlocks after aControl+Cevent (SIGTERM). By default, this option is disabled.Setting this option is equivalent to running the
jstack -lcommand or thejcmdpidThread.print -lcommand, where pid is the current Java process identifier. - -XX:+UnlockDiagnosticVMOptions
-
Unlocks the options intended for diagnosing the JVM. By default, this option is disabled and diagnostic options are not available.
Advanced Garbage Collection Options
These options control how garbage collection (GC) is performed by the Java HotSpot VM.
-XX:+AggressiveHeapEnables Java heap optimization. This sets various parameters to be optimal for long-running jobs with intensive memory allocation, based on the configuration of the computer (RAM and CPU). By default, the option is disabled and the heap is not optimized.
-XX:+AlwaysPreTouchEnables touching of every page on the Java heap during JVM initialization. This gets all pages into the memory before entering the main() method. The option can be used in testing to simulate a long-running system with all virtual memory mapped to physical memory. By default, this option is disabled and all pages are committed as JVM heap space fills.
Enables class unloading when using the concurrent mark-sweep (CMS) garbage collector. This option is enabled by default. To disable class unloading for the CMS garbage collector, specify -XX:-CMSClassUnloadingEnabled.
Sets the percentage of time (0 to 100) used to weight the current sample when computing exponential averages for the concurrent collection statistics. By default, the exponential averages factor is set to 25%. The following example shows how to set the factor to 15%:
-XX:CMSExpAvgFactor=15-XX:CMSInitiatingOccupancyFraction= percent
設置開始CMS收集周期的舊一代占有率(0到100)的百分比。默認值設置為-1。任何負值(包括默認值)意味着-XX:CMSTriggerRatio用於定義起始占用率的值。
以下示例顯示如何將占用率設置為20%:
-XX:CMSInitiatingOccupancyFraction = 20-XX:+ CMSScavengeBeforeRemark
在CMS注釋步驟之前啟用清理嘗試。默認情況下,此選項被禁用。
-XX:CMSTriggerRatio = percent設置在-XX:MinHeapFreeRatioCMS收集周期開始之前分配的值所指定值的百分比(0到100)。默認值設置為80%。
以下示例顯示如何將占用率設置為75%:
-XX:CMSTriggerRatio = 75-XX:ConcGCThreads = 線程
設置用於並發GC的線程數。默認值取決於JVM可用的CPU數量。
例如,要將並發GC的線程數設為2,請指定以下選項:
-XX:ConcGCThreads = 2-XX:+ DisableExplicitGC
啟用禁用處理呼叫的選項System.gc()。默認情況下,此選項被禁用,這意味着處理呼叫System.gc()。如果處理呼叫System.gc()被禁用,則JVM在必要時仍然執行GC。
通過使用System.gc()請求啟用並發GC 。默認情況下,此選項被禁用,只能與-XX:+UseConcMarkSweepGC選項一起啟用。
通過System.gc()在並發GC循環中使用請求和卸載來啟用並發GC的調用。默認情況下,此選項被禁用,只能與-XX:+UseConcMarkSweepGC選項一起啟用。
使用垃圾回收(G1)收集器時,設置Java堆細分的區域的大小。該值可以在1 MB到32 MB之間。基於堆大小,人體工程學確定默認區域大小。
以下示例顯示如何將細分的大小設置為16 MB:
-XX:G1HeapRegionSize =16米-XX:+ G1PrintHeapRegions
可以打印分配哪些區域以及G1收集器回收的信息。默認情況下,此選項被禁用。
-XX:G1ReservePercent = percent設置保留為假天花板的堆(0到50)的百分比,以減少G1收集器的升級失敗的可能性。默認情況下,此選項設置為10%。
以下示例顯示如何將保留堆設置為20%:
-XX:G1ReservePercent = 20-XX:InitialHeapSize = size
-
設置內存分配池的初始大小(以字節為單位)。此值必須為0,或1024或大於1 MB的倍數。附加信件
k或K指示千字節,m或M指示兆字節,g或G表示千兆字節。默認值是基於系統配置在運行時選擇的。見一節“人體工程學” 的Java SE HotSpot虛擬機垃圾收集調優指南的http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html。以下示例顯示如何使用各種單位將分配的內存大小設置為6 MB:
-XX:InitialHeapSize = 6291456 -XX:InitialHeapSize = 6144k -XX:InitialHeapSize = 6m
如果將此選項設置為0,則初始大小將被設置為為舊代和年輕一代分配的大小的總和。可以使用該
-XX:NewSize選項設置年輕一代的堆大小。 - -XX:InitialSurvivorRatio = ratio
-
設置吞吐量垃圾收集器使用的初始幸存者空間比(由
-XX:+UseParallelGC/或 -XX:+UseParallelOldGC選項啟用)。默認情況下,通過使用-XX:+UseParallelGC和-XX:+UseParallelOldGCoptions 可以使用吞吐量垃圾收集器來啟用自適應大小,並且從初始值開始,根據應用程序行為調整幸存者空間。如果禁用自適應大小(使用-XX:-UseAdaptiveSizePolicy選項),則-XX:SurvivorRatio應該使用該選項來設置整個執行應用程序的幸存空間的大小。以下公式可用於根據年輕一代(Y)的大小和初始幸存者空間比(R)計算幸存者空間(S)的初始大小:
S = Y /(R + 2)
方程式中的2表示兩個幸存者空間。初始幸存者空間比指定的值越大,初始幸存者空間大小越小。
默認情況下,初始幸存者空間比設置為8.如果使用年輕一代空間大小的默認值(2 MB),則幸存者空間的初始大小將為0.2 MB。
以下示例顯示如何將初始幸存者空間比設置為4:
-XX:InitialSurvivorRatio = 4
- -XX:InitiateHeapOccupancyPercent = percent
-
設置開始並發GC循環的堆占用百分比(0到100)。垃圾收集器使用的觸發並發GC循環,基於整個堆的占用,而不僅僅是一代(例如,G1垃圾收集器)。
默認情況下,啟動值設置為45%。值為0表示不間斷GC循環。以下示例顯示如何將啟動堆占用率設置為75%:
-XX:InitiatingHeapOccupancyPercent = 75
- -XX:MaxGCPauseMillis =time
-
設置最大GC暫停時間的目標(以毫秒為單位)。這是一個軟性目標,JVM將盡力實現。默認情況下,沒有最大暫停時間值。
以下示例顯示如何將最大目標暫停時間設置為500 ms:
-XX:MaxGCPauseMillis = 500
- -XX:MaxHeapSize = size
-
Sets the maximum size (in byes) of the memory allocation pool. This value must be a multiple of 1024 and greater than 2 MB. Append the letter
korKto indicate kilobytes,morMto indicate megabytes,gorGto indicate gigabytes. The default value is chosen at runtime based on system configuration. For server deployments,-XX:InitialHeapSizeand-XX:MaxHeapSizeare often set to the same value. See the section "Ergonomics" in Java SE HotSpot Virtual Machine Garbage Collection Tuning Guide athttp://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html.The following examples show how to set the maximum allowed size of allocated memory to 80 MB using various units:
-XX:MaxHeapSize=83886080 -XX:MaxHeapSize=81920k -XX:MaxHeapSize=80m
On Oracle Solaris 7 and Oracle Solaris 8 SPARC platforms, the upper limit for this value is approximately 4,000 MB minus overhead amounts. On Oracle Solaris 2.6 and x86 platforms, the upper limit is approximately 2,000 MB minus overhead amounts. On Linux platforms, the upper limit is approximately 2,000 MB minus overhead amounts.
The
-XX:MaxHeapSizeoption is equivalent to-Xmx. - -XX:MaxHeapFreeRatio= percent
-
Sets the maximum allowed percentage of free heap space (0 to 100) after a GC event. If free heap space expands above this value, then the heap will be shrunk. By default, this value is set to 70%.
The following example shows how to set the maximum free heap ratio to 75%:
-XX:MaxHeapFreeRatio=75
- -XX:MaxMetaspaceSize= size
-
Sets the maximum amount of native memory that can be allocated for class metadata. By default, the size is not limited. The amount of metadata for an application depends on the application itself, other running applications, and the amount of memory available on the system.
The following example shows how to set the maximum class metadata size to 256 MB:
-XX:MaxMetaspaceSize=256m
- -XX:MaxNewSize= size
-
Sets the maximum size (in bytes) of the heap for the young generation (nursery). The default value is set ergonomically.
- -XX:MaxTenuringThreshold= threshold
-
Sets the maximum tenuring threshold for use in adaptive GC sizing. The largest value is 15. The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector.
The following example shows how to set the maximum tenuring threshold to 10:
-XX:MaxTenuringThreshold=10
- -XX:MetaspaceSize= size
-
Sets the size of the allocated class metadata space that will trigger a garbage collection the first time it is exceeded. This threshold for a garbage collection is increased or decreased depending on the amount of metadata used. The default size depends on the platform.
- -XX:MinHeapFreeRatio= percent
-
Sets the minimum allowed percentage of free heap space (0 to 100) after a GC event. If free heap space falls below this value, then the heap will be expanded. By default, this value is set to 40%.
The following example shows how to set the minimum free heap ratio to 25%:
-XX:MinHeapFreeRatio=25
- -XX:NewRatio= ratio
-
Sets the ratio between young and old generation sizes. By default, this option is set to 2. The following example shows how to set the young/old ratio to 1:
-XX:NewRatio=1
- -XX:NewSize= size
-
Sets the initial size (in bytes) of the heap for the young generation (nursery). Append the letter
korKto indicate kilobytes,morMto indicate megabytes,gorGto indicate gigabytes.堆的年輕一代區域用於新對象。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) - 年齡1:28992024字節,28992024總計 2:1366864字節,30358888總計 3:1425912字節,31784800總計 ...
年齡1的對象是最年輕的幸存者(他們是在以前的掃除之后創造的,在最新的清除之后幸存下來,並從伊甸園遷到幸存者的空間)。年齡2的物體幸存下來的兩個清除(在第二次清掃期間,他們從一個幸存者的空間復制到下一個)。等等。
在前面的例子中,28 992 024個字節幸免於一次清除,並從eden復制到幸存者空間,1 366 864個字節被2歲以下的對象占用。每一行的第三個值是年齡n或減。
默認情況下,此選項被禁用。
- -XX:+ ScavengeBeforeFullGC
-
在每個完整GC之前啟用年輕一代的GC。默認情況下啟用此選項。Oracle建議您不要禁用它,因為在完整的GC之前清理年輕一代可以減少從舊一代空間到年輕一代空間可達到的對象數量。要在每個完整GC之前禁用年輕一代的GC,請指定
-XX:-ScavengeBeforeFullGC。 - -XX:SoftRefLRUPolicyMSPerMB =time
-
設置在上次引用之后,可輕松達到的對象在堆上保持活動的時間量(以毫秒為單位)。默認值是堆中每空閑兆字節的生命周期的1秒。該
-XX:SoftRefLRUPolicyMSPerMB選項接受表示每兆字節當前堆大小(對於Java HotSpot Client VM)的毫秒數或最大可能堆大小(適用於Java HotSpot Server VM)的整數值。這種差異意味着客戶端VM傾向於刷新軟引用而不是擴展堆,而服務器虛擬機傾向於增加堆而不是刷新軟引用。在后一種情況下,該-Xmx選項的值對於軟引用的垃圾收集速度有顯着影響。以下示例顯示如何將值設置為2.5秒:
-XX:SoftRefLRUPolicyMSPerMB = 2500
- -XX:StringDeduplicationAgeThreshold =threshold
-
String達到指定年齡的對象被認為是重復數據刪除的候選者。對象的年齡是衡量垃圾收集次數的幾倍。這有時被稱為終身教育; 看到-XX:+PrintTenuringDistribution選項。請注意,String在達到此年齡之前升級到舊堆區域的對象始終被認為是重復數據刪除的候選對象。該選項的默認值為3。看到-XX:+UseStringDeduplication選項。 - -XX:SurvivorRatio = ratio
-
設置eden空間大小和幸存者空間大小之間的比例。默認情況下,此選項設置為8.以下示例顯示如何將eden /幸存者空間比設置為4:
-XX:SurvivorRatio = 4
- -XX:TargetSurvivorRatio = percent
-
Sets the desired percentage of survivor space (0 to 100) used after young garbage collection. By default, this option is set to 50%.
The following example shows how to set the target survivor space ratio to 30%:
-XX:TargetSurvivorRatio=30
- -XX:TLABSize= size
-
Sets the initial size (in bytes) of a thread-local allocation buffer (TLAB). Append the letter
korKto indicate kilobytes,morMto indicate megabytes,gorGto indicate gigabytes. If this option is set to 0, then the JVM chooses the initial size automatically.The following example shows how to set the initial TLAB size to 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上花費的時間比例的策略。默認情況下啟用此選項,並且並行GC將拋出OutOfMemoryError總共時間的98%用於垃圾回收,並且小於2%的堆將被恢復。堆小時,此功能可用於防止應用程序長時間運行,幾乎沒有進展。要禁用此選項,請指定-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:+ UseSHM
-
在Linux上,使JVM可以使用共享內存來設置大頁面。
有關詳細信息,請參閱“大頁面”。
- -XX:+ UseStringDeduplication
-
啟用字符串重復數據刪除。默認情況下,此選項被禁用。要使用此選項,必須啟用垃圾回收(G1)垃圾收集器。看到
-XX:+UseG1GC選項。字符串重復數據刪除
String通過利用許多String對象相同的事實來減少Java堆上對象的內存占用。而不是每個String對象指向自己的字符數組,相同的String對象可以指向並共享相同的字符數組。 - -XX:+ UseTLAB
-
允許在年輕一代的空間中使用線程本地分配塊(TLAB)。默認情況下啟用此選項。要禁用TLAB的使用,請指定
-XX:-UseTLAB。
已棄用和已刪除的選項
這些選項已包含在以前的版本中,但之后被認為是不必要的。
- -Xincgc
-
啟用增量垃圾收集。此選項在JDK 8中已被棄用,無需更換。
- -Xrun libname
-
加載指定的調試/分析庫。該選項被選項取代
-agentlib。 - -XX:CMSIncrementalDutyCycle = percent
-
設置允許並發收集器運行的次要集合之間的時間百分比(0到100)。此選項在JDK 8中已被棄用,無需替換,因為該選項被棄用
-XX:+CMSIncrementalMode。 - -XX:CMSIncrementalDutyCycleMin = percent
-
設置作為
-XX:+CMSIncrementalPacing啟用占空比下限的次要集合之間的時間百分比(0到100)。此選項在JDK 8中已被棄用,無需替換,因為該選項被棄用-XX:+CMSIncrementalMode。 - -XX:+ CMSIncrementalMode
-
啟用CMS收集器的增量模式。此選項在JDK 8中已被棄用,無需替換,以及以其他選項開始
CMSIncremental。 - -XX:CMSIncrementalOffset = percent
-
設置在次要集合之間的時間段內增量模式占空比向右移動的時間百分比(0到100)。此選項在JDK 8中已被棄用,無需替換,因為該選項被棄用
-XX:+CMSIncrementalMode。 - -XX:+ CMSIncrementalPacing
-
根據JVM運行時收集的統計信息,可以自動調整增量模式占空比。此選項在JDK 8中已被棄用,無需替換,因為該選項被棄用
-XX:+CMSIncrementalMode。 - -XX:CMSIncrementalSafetyFactor = percent
-
設置計算占空比時用於添加保守性的時間百分比(0到100)。此選項在JDK 8中已被棄用,無需替換,因為該選項被棄用
-XX:+CMSIncrementalMode。 - -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中刪除,無需更換。
性能調優示例
以下示例說明如何使用實驗性調優標志來優化吞吐量或提供較低的響應時間。
示例1 - 調整更高的吞吐量java -d64 -server -XX:+ AggressiveOpts -XX:+ UseLargePages -Xmn10g -Xms26g -Xmx26g
示例2 - 調整響應時間較短
java -d64 -XX:+ UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis = 500 -XX:+ PrintGCTimeStamp
大頁
也稱為巨大頁面,大頁面是顯着大於標准內存頁面大小(根據處理器和操作系統而異)的內存頁面。大頁面優化處理器翻譯后備緩沖區。
翻譯后備緩沖區(TLB)是一種頁面翻譯緩存,保存最近使用的虛擬到物理地址轉換。TLB是一個稀缺的系統資源。因為處理器必須從層次化的頁表中讀取,這可能需要多個存儲器訪問,TLB缺失可能是昂貴的。通過使用較大的內存頁面大小,單個TLB條目可以表示較大的內存范圍。對TLB的壓力將更小,內存密集型應用程序可能具有更好的性能。
然而,大頁面頁面內存可能會對系統性能產生負面影響。例如,當應用程序固定大量內存時,可能會導致常規內存不足,並導致其他應用程序中的超量尋呼,並減緩整個系統。而且,一個長時間起來的系統可能會產生過多的碎片,這樣就無法預留足夠大的頁面內存。當這種情況發生時,操作系統或JVM將恢復使用常規頁面。
大頁面支持
Solaris和Linux支持大頁面。
的Solaris
Solaris 9及更高版本包括多頁大小支持(MPSS); 不需要額外的配置。見http://www.oracle.com/technetwork/server-storage/solaris10/overview/solaris9-features-scalability-135663.html。
Linux的
2.6內核支持大頁面。一些供應商已經將代碼轉載到了基於2.4的版本。要檢查您的系統是否可以支持大頁面內存,請嘗試以下操作:
#cat / proc / meminfo | grep Huge HugePages_Total:0 HugePages_Free:0 Hugepagesize:2048 kB
如果輸出顯示三個“巨大”變量,那么您的系統可以支持大頁面內存,但需要配置。如果命令不打印,那么您的系統不支持大頁面。要配置系統使用大頁面內存,請登錄root,然后按照下列步驟操作:
-
如果您使用該選項
-XX:+UseSHM(而不是-XX:+UseHugeTLBFS),則增加該SHMMAX值。它必須大於Java堆大小。在具有4 GB物理RAM(或更小)的系統上,以下將使所有內存共享:#echo 4294967295> / proc / sys / kernel / shmmax
-
如果您使用該選項,
-XX:+UseSHM或者-XX:+UseHugeTLBFS指定大頁數。在下面的示例中,為大頁面預留3 GB的4 GB系統(假定大頁面大小為2048kB,則3 GB = 3 * 1024 MB = 3072 MB = 3072 * 1024 kB = 3145728 kB和3145728 kB / 2048 kB = 1536):#echo 1536> / proc / sys / vm / nr_hugepages
| 注意:
|
應用程序類數據共享
應用程序類數據共享(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。最后一步使用共享存檔文件運行應用程序。
-
創建應用程序使用的所有類的列表
test.Hello。以下命令創建一個名為的文件hello.classlist,其中包含此應用程序使用的所有類的列表:java -Xshare:off -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp hello.jar test.Hello請注意,該
-cp參數只能包含JAR文件; 該-XX:+UseAppCDS選項不支持包含目錄名稱的類路徑。 -
創建一個名為的共享存檔,
hello.jsa其中包含以下所有類hello.classlist:java -XX:+UnlockCommercialFeatures -Xshare:dump -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -XX:SharedClassListFile=hello.classlist -cp hello.jar請注意,
-cp在歸檔創建時使用的參數必須與-cp運行時使用的參數相同(或前綴)。 -
使用
test.Hello共享存檔運行應用程序hello.jsa:java -XX:+UnlockCommercialFeatures -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=hello.jsa -cp hello.jar test.Hello確保您已指定選項
-Xshare:on或 -Xshare:auto。 -
驗證應用
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可以使用的共享存檔。
-
創建應用程序使用的所有類的列表
Hello和應用程序的另一個列表Hi:java -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hello.classlist -XX:+UseAppCDS -cp common.jar:hello.jar Hellojava -XX:+UnlockCommercialFeatures -XX:DumpLoadedClassList=hi.classlist -XX:+UseAppCDS -cp common.jar:hi.jar Hi請注意,由於
Hello和Hi應用程序都有一個共同的類路徑前綴(包括他們的類路徑開始common.jar),這兩個應用程序可以共享一個共享的歸檔文件。 -
創建共享共享存檔文件的所有應用程序使用的類的單個列表。
以下命令將文件
hello.classlist和hi.classlist一個文件相結合common.classlist:cat hello.classlist hi.classlist > common.classlist -
創建一個名為的共享存檔,
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應用程序。 -
使用相同的共享存檔運行
Hello和應用Hi程序:java -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hello.jar Hellojava -XX:+UnlockCommercialFeatures -Xshare:on -XX:SharedArchiveFile=common.jsa -XX:+UseAppCDS -cp common.jar:hi.jar Hi
