jdk8 jvm Options


原地址:http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

java [ options ] classname [ args ]

java [ options ] -jar filename [ args ]

 
options  以空格分隔的命令行選項。請參閱 選項
classname   要啟動的類的名稱。
filename  將要調用的Java Archive(JAR)文件的名稱。僅與 -jar選項一起使用。
args   遞給 main()方法的參數, 由空格分隔。

描述

java命令啟動Java應用程序。它通過啟動Java運行時環境(JRE),加載指定的類,並調用該類的main()方法來實現。該方法必須聲明為publicstatic,它不能返回任何值,它必須接受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)禁用布爾選項。

對於需要參數的選項,參數可以通過空格,冒號(:)或等號(=)與選項名稱分開,或者參數可以直接跟隨選項(每個選項的確切語法不同) )。如果您希望指定大小(以字節為單位),則可以使用無后綴,或使用后綴kK千字節(KB)mM兆字節(MB)gG千兆字節(GB)。例如,設置大小為8 GB,您可以指定8g8192m8388608k,或8589934592作為參數。如果您希望指定百分比,請使用0到1之間的數字(例如,指定0.2525%)。

標准選項

這些是JVM的所有實現都支持的最常用的選項。

-agentlib: libname [=  options ]

加載指定的本機代理庫。在庫名稱之后,可以使用逗號分隔的庫的特定選項列表。

如果指定了該選項-agentlib:foo,則JVM將嘗試加載libfoo.soLD_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

有關本地代理程序庫的更多信息,請參閱以下內容:

-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文件的更多信息,請參閱以下資源:

-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..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選項的幫助。

-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選項在編譯之前更改解釋方法調用的數量。

-Xdebug

什么也沒做。提供向后兼容性。

-Xdiag

顯示其他診斷消息。

-Xfuture

啟用嚴格的類文件格式檢查,強制實現與類文件格式規范的緊密一致。鼓勵開發人員在開發新代碼時使用此標志,因為在未來的版本中,更嚴格的檢查將成為默認值。

-Xint

以僅解釋模式運行應用程序。編譯到本地代碼是禁用的,所有的字節碼都由解釋器執行。此模式中不存在即時(JIT)編譯器提供的性能優勢。

-Xinternalversion

顯示比該-version選項更詳細的JVM版本信息,然后退出。

-Xloggc:filename

將要重定向的詳細GC事件信息的文件設置為記錄。寫入此文件的信息與-verbose:gc每個記錄事件之前的第一個GC事件所經過的時間的輸出類似。如果兩者都使用相同的命令,該-Xloggc選項將覆蓋。-verbose:gcjava

例:

-Xloggc:垃圾collection.log
-Xmaxjitcodesize = size

指定JIT編譯代碼的最大代碼高速緩存大小(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認的最大代碼緩存大小為240 MB; 如果您使用該選項禁用分層編譯-XX:-TieredCompilation,則默認大小為48 MB:

-Xmaxjitcodesize =240米

此選項相當於-XX:ReservedCodeCacheSize

-Xmixed

由解釋器執行所有字節碼,除了熱方法,它們被編譯為本地代碼。

-Xmn size
設置年輕代的大小(以字節為單位)。如果以 kK結尾,則表示千字節, mM指示兆字節, gG表示千兆字節。

堆的年輕代區域用於新對象。GC在這個地區比其他地區更頻繁地進行。如果年輕代的規模太小,那么將會執行大量的minor garbage。如果太大,那么只會執行full garbage,但是需要很長時間才能完成。Oracle建議您將年輕代的大小保持在整個堆大小的一半到四分之一之間。

以下示例顯示如何使用各種單位將年輕代的初始和最大大小設置為256MB:

-Xmn256m 
-Xmn262144k 
-Xmn268435456

而不是-Xmn為年輕代-XX:NewSize設置堆的初始和最大大小的選項,您可以使用設置初始大小和-XX:MaxNewSize設置最大大小。

-Xms  size

設置堆的初始大小(以字節為單位)。該值必須是1024和大於1 MB的倍數。如果以kK結尾表示千字節,mM指示兆字節,gG表示千兆字節。

以下示例將分配的內存大小設置為6MB(三種方式均可):

-Xms6291456 
-Xms6144k 
-Xms6m

如果您不設置此選項,則初始大小將被設置為為老年代和年輕代分配的大小的總和。可以使用-Xmn選項或-XX:NewSize選項設置年輕代的堆的初始大小。

-Xmx  size

指定JVM最大的可用(堆)內存(以字節為單位),以字節為單位。此值必須是1024和大於2 MB的倍數。如果以kK結尾表示千字節,mM指示兆字節,gG表示千兆字節。默認值是基於系統配置在運行時選擇的。對於服務器部署,-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使用SIGHUPSIGINTSIGTERM啟動關閉掛鈎的運行。

JVM使用類似的機制實現轉儲線程堆棧的功能以進行調試。JVM用於SIGQUIT執行線程轉儲。

嵌入JVM的應用程序經常需要捕獲諸如SIGINT或者SIGTERM可能導致對JVM信號處理程序的干擾的信號。該-Xrs選項可用於解決此問題。當-Xrs被使用時,用於信號掩模SIGINTSIGTERMSIGHUP,和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

設置線程堆棧大小(以字節為單位)。kK指示KB,mM指示MB,gG指示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

使用替代信號,而不是SIGUSR1SIGUSR2對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的運行時行為。

-XX:+ CheckEndorsedAndExtDirs

啟用該選項,以防止該java命令運行Java應用程序,如果它使用已批准的標准超馳機制或擴展機制。此選項通過檢查以下內容來檢查應用程序是否正在使用這些機制之一:

  • 該屬性java.ext.dirsjava.endorsed.dirs系統屬性已設置。

  • lib/endorsed目錄存在且不為空。

  • lib/ext目錄包含除了JDK之外的任何JAR文件。

  • 系統范圍的平台特定擴展目錄包含任何JAR文件。

-XX:+ DisableAttachMechanism

啟用禁用允許工具附加到JVM的機制的選項。默認情況下,該選項被禁用,這意味着連接機制啟用,您可以使用工具,例如jcmdjstackjmap,和jinfo

-XX:ErrorFile = filename

指定發生不可恢復錯誤時寫入錯誤數據的路徑和文件名。默認情況下,此文件在當前工作目錄中創建並命名為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:+ 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

dumponexit = {true|false}

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

轉儲文件被寫入由dumponexitpath參數定義的位置。

dumponexitpath =  path

指定當JVM以受控方式退出時創建的JFR數據的轉儲文件的路徑和名稱,如果設置dumponexit=true參數。設置路徑只有在您設置時才有意義defaultrecording=true

如果指定的路徑是目錄,則JVM會分配一個顯示創建日期和時間的文件名。如果指定的路徑包含一個文件名,如果該文件已經存在,JVM將通過將日期和時間戳記附加到指定的文件名來創建一個新文件。

globalbuffersize =  size

指定用於數據保留的主內存(以字節為單位)的總量。追加kK到指定KB大小,mM以MB為單位指定大小,gG到指定GB的大小。默認情況下,大小設置為462848字節。

日志等級= {quiet|error|warning|info|debug|trace}

指定通過JFR寫入日志文件的數據量。默認設置為info

maxage =  time

指定要保留默認錄制的磁盤數據的最大時間。追加s以秒m為單位指定時間,分鍾,h數小時或d天數(例如,指定30s30秒)。默認情況下,最大年齡設置為15分鍾(15m)。

此參數僅在設置參數時有效disk=true

maxchunksize =  size

指定記錄中數據塊的最大大小(以字節為單位)。追加kK到指定KB大小,mM以MB為單位指定大小,gG到指定GB的大小。默認情況下,數據塊的最大大小設置為12 MB。

maxsize =  size

指定要保留的默認記錄的磁盤數據的最大大小(以字節為單位)。追加kK到指定KB大小,mM以MB為單位指定大小,gG到指定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

指定每線程本地緩沖區大小(以字節為單位)。追加kK到指定KB大小,mM以MB為單位指定大小,gG到指定GB的大小。此參數的較高值允許更多的數據收集而無需爭用將其刷新到全局存儲。它可以在線程豐富的環境中增加應用程序占用空間。默認情況下,本地緩沖區大小設置為5 KB。

您可以通過用逗號分隔多個參數來指定值。例如,要指示JFR將連續記錄寫入磁盤,並將數據塊的最大大小設置為10 MB,請指定以下內容:

-XX:FlightRecorderOptions = defaultrecording = TRUE,磁盤= TRUE,maxchunksize = 10M
-XX:LargePageSizeInBytes = size

在Solaris上,設置用於Java堆的大頁面的最大大小(以字節為單位)。的尺寸參數必須是2的冪(2,4,8,16,...)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認情況下,大小設置為0,這意味着JVM自動選擇大頁面的大小。

以下示例說明如何將大頁面大小設置為4兆字節(MB):

-XX:LargePageSizeInBytes =4米
-XX:MaxDirectMemorySize = size

設置新I / O(java.nio包)直接緩沖區分配的最大總大小(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認情況下,大小設置為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 = 對齊

設置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選項的說明。

-XX:+ PerfDataSaveToFile
如果啟用,則在Java應用程序退出時

保存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

指定要保留的默認記錄的磁盤數據的最大大小(以字節為單位)。追加kK到指定KB大小,mM以MB為單位指定大小,gG到指定GB的大小。默認情況下,磁盤數據的最大大小不受限制,此參數設置為0。

settings =  path

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

您可以通過用逗號分隔多個參數來指定值。例如,要將錄音保存到當前工作目錄中的test.jfr,並指示JFR壓縮日志文件,請指定以下內容:

-XX:StartFlightRecording =文件名= test.jfr,壓縮= TRUE
-XX:ThreadStackSize =  size

設置線程堆棧大小(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認值取決於平台:

  • 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

使得能夠使用替代信號,而不是SIGUSR1SIGUSR2用於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線程都有自己的分配點。

負值表示基於平台選擇預取距離。正值是要預取的字節。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認值設置為-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

設置順序預取指令的步長(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認情況下,步長設置為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

設置編譯所需的最小可用空間(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。當小於最小可用空間時,編譯停止。默認情況下,此選項設置為500 KB。以下示例顯示如何將最小可用空間設置為1024 MB:

-XX:CodeCacheMinimumFreeSpace =1024米
-XX:CompileCommand =  commandmethod [, 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編譯選項傳遞給指定的方法,代替最后一個參數(選項)。編譯選項設置在方法名后面。例如,要啟用該類BlockLayoutByFrequencyappend()方法的選項StringBuffer,請使用以下命令:

-XX:CompileCommand =選項,爪哇/郎/的StringBuffer.append,BlockLayoutByFrequency

您可以指定多個編譯選項,用逗號或空格分隔。

print

在編譯指定的方法后打印生成的匯編代碼。

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

設置初始代碼緩存大小(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認值設置為500 KB。初始代碼緩存大小應不小於系統的最小內存頁大小。以下示例顯示如何將初始代碼緩存大小設置為32 KB:

-XX:InitialCodeCacheSize = 32K
-XX:+內嵌

啟用方法內聯。此選項默認啟用以提高性能。要禁用方法內聯,請指定-XX:-Inline

-XX:InlineSmallCode =  size

設置應該內聯的編譯方法的最大代碼大小(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。只有尺寸小於指定大小的編譯方法才會被內聯。默認情況下,最大代碼大小設置為1000字節:

-XX:InlineSmallCode = 1000
-XX:+ LogCompilation

將編譯活動記錄到hotspot.log當前工作目錄中命名的文件中。您可以使用該-XX:LogFile選項指定其他日志文件路徑和名稱。

默認情況下,禁用此選項,並且不記錄編譯活動。該-XX:+LogCompilation選項必須與-XX:UnlockDiagnosticVMOptions解鎖診斷JVM選項的選項一起使用。

每次使用該-XX:+PrintCompilation選項編譯方法時,都可以啟用詳細診斷輸出,並將消息打印到控制台。

-XX:MaxInlineSize =  size

設置要內聯的方法的最大字節碼大小(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認情況下,最大字節碼大小設置為35字節:

-XX:MaxInlineSize = 35
-XX:MaxNodeLimit =  nodes

設置在單個方法編譯期間要使用的最大節點數。默認情況下,最大節點數設置為65,000:

-XX:MaxNodeLimit = 65000
-XX:MaxTrivialSize =  size

設置要內聯的簡單方法的最大字節碼大小(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認情況下,一個簡單方法的最大字節碼大小設置為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編譯代碼的最大代碼高速緩存大小(以字節為單位)。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認的最大代碼緩存大小為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引入了新的指示XBEGINXABORTXEND,和XTEST。該指令XBEGINXEND指令包含一組要作為事務運行的指令。如果在運行事務時沒有發現任何沖突,則內存和寄存器修改將在指令中一起XEND提交。該XABORT指令可用於明確地中止一個事務以及XEND用於檢查一組指令是否在事務中運行的指令。

當另一個線程嘗試訪問相同的事務時,事務的鎖定會被膨脹,從而阻止最初未請求訪問該事務的線程。RTM要求在事務中止或失敗的情況下指定后備操作集。RTM鎖是一個被委派給TSX系統的鎖。

RTM可以在關鍵區域(這是不能被多個線程同時訪問的代碼)的高度競爭的鎖中提高性能。RTM還提高了粗粒度鎖定的性能,這通常在多線程應用程序中性能不佳。(粗粒鎖定是長時間保持鎖定的策略,以最大限度地減少鎖和釋放鎖的開銷,而細粒度鎖定是通過僅在必要時鎖定並盡快解鎖來實現最大並行度的策略。 )而且,對於由不同線程使用的輕量級的鎖,RTM可以減少虛擬高速緩存行共享,也稱為緩存線乒乓。當來自不同處理器的多個線程正在訪問不同的資源時,但資源共享相同的緩存行。結果,處理器反復使其他處理器的高速緩存行無效,這迫使他們從主存儲器而不是其高速緩存讀取。

-XX:+UseSHA

Enables hardware-based intrinsics for SHA crypto hash functions for SPARC hardware. UseSHA is used in conjunction with the UseSHA1IntrinsicsUseSHA256Intrinsics, and UseSHA512Intrinsics options.

The UseSHA and UseSHA*Intrinsics flags 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.Sun provider 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 dtrace tool probes that impact the performance. By default, this option is disabled and dtrace performs 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.OutOfMemoryError exception is thrown. You can explicitly set the heap dump file path and name using the -XX:HeapDumpPath option. By default, this option is disabled and the heap is not dumped when an OutOfMemoryError exception 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:+HeapDumpOnOutOfMemoryError option is set. By default, the file is created in the current working directory, and it is named java_pidpid.hprof where pid is the identifier of the process that caused the error. The following example shows how to set the default file explicitly (%p represents 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+C event (SIGTERM). By default, this option is disabled.

Setting this option is equivalent to running the jmap -histo command, or the jcmd pid GC.class_histogram command, where pid is the current Java process identifier.

-XX:+PrintConcurrentLocks

Enables printing of java.util.concurrent locks after a Control+C event (SIGTERM). By default, this option is disabled.

Setting this option is equivalent to running the jstack -l command or the jcmd pid Thread.print -l command, 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:+AggressiveHeap

Enables 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:+AlwaysPreTouch

Enables 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.

-XX:+CMSClassUnloadingEnabled

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.

-XX:CMSExpAvgFactor= percent

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。

-XX:+ ExplicitGCInvokesConcurrent

通過使用System.gc()請求啟用並發GC 。默認情況下,此選項被禁用,只能與-XX:+UseConcMarkSweepGC選項一起啟用。

-XX:+ ExplicitGCInvokesConcurrentAndUnloadsClasses

通過System.gc()在並發GC循環中使用請求和卸載來啟用並發GC的調用。默認情況下,此選項被禁用,只能與-XX:+UseConcMarkSweepGC選項一起啟用。

-XX:G1HeapRegionSize =  size

使用垃圾回收(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的倍數。附加信件kK指示千字節,mM指示兆字節,gG表示千兆字節。默認值是基於系統配置在運行時選擇的。見一節“人體工程學” 的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 k or K to indicate kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. The default value is chosen at runtime based on system configuration. For server deployments, -XX:InitialHeapSize and -XX:MaxHeapSize are often set to the same value. See the section "Ergonomics" in Java SE HotSpot Virtual Machine Garbage Collection Tuning Guide at http://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:MaxHeapSize option 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 k or K to indicate kilobytes, m or M to indicate megabytes, g or G to 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 k or K to indicate kilobytes, m or M to indicate megabytes, g or G to 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,然后按照下列步驟操作:

  1. 如果您使用該選項-XX:+UseSHM(而不是-XX:+UseHugeTLBFS),則增加該SHMMAX值。它必須大於Java堆大小。在具有4 GB物理RAM(或更小)的系統上,以下將使所有內存共享:

    #echo 4294967295> / proc / sys / kernel / shmmax
    
  2. 如果您使用該選項,-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
    

注意:

  • 請注意,/proc重新啟動系統后,包含的值將重置,因此可能需要將其設置為初始化腳本(例如,rc.localsysctl.conf)。
  • 如果您配置(或調整大小)操作系統內核參數,/proc/sys/kernel/shmmax或者/proc/sys/vm/nr_hugepagesJava進程可能會分配除了Java堆之外的區域的大頁面。這些步驟可以為以下區域分配大頁面:

    • Java堆

    • 代碼緩存

    • 並行GC的標記位圖數據結構

    因此,如果將參數nr_hugepages配置為Java堆的大小,則JVM可能無法在大頁面上分配代碼緩存區域,因為這些區域的大小相當大。

應用程序類數據共享

應用程序類數據共享(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. 使用test.Hello共享存檔運行應用程序hello.jsa

    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

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

您可以在具有完全相同的類路徑或共享公共類路徑前綴的多個應用程序進程之間共享相同的歸檔文件。這將減少內存使用,因為歸檔文件被內存映射到進程的地址空間。操作系統自動共享這些進程中的只讀頁面。

以下步驟創建兩個應用程序HelloHi可以使用的共享存檔。

  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

    請注意,由於HelloHi應用程序都有一個共同的類路徑前綴(包括他們的類路徑開始common.jar),這兩個應用程序可以共享一個共享的歸檔文件。

  2. 創建共享共享存檔文件的所有應用程序使用的類的單個列表。

    以下命令將文件hello.classlisthi.classlist一個文件相結合common.classlist

    cat 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的參數是通過共享的公共類路徑前綴HelloHi應用程序。

  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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM