顯示所有可用-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個已解釋的方法調用,Server VM(-server
)執行10,000個已解釋的方法調用以收集有效編譯的信息。指定該-Xcomp
選項會禁用已解釋的方法調用,從而以犧牲效率為代價來提高編譯性能。
您還可以使用該-XX:CompileThreshold
選項在編譯之前更改已解釋的方法調用的數量。
什么也沒做。提供向后兼容性。
-Xdiag顯示其他診斷消息。
-Xfuture啟用嚴格的類文件格式檢查,以強制與類文件格式規范緊密一致。鼓勵開發人員在開發新代碼時使用此標志,因為更嚴格的檢查將成為未來版本中的默認值。
-Xint以僅解釋模式運行應用程序。禁用對本機代碼的編譯,並且解釋器將執行所有字節碼。暫時(JIT)編譯器提供的性能優勢在此模式下不存在。
-Xinternalversion顯示比該-version
選項更詳細的JVM版本信息,然后退出。
設置應將重定向的GC事件信息重定向到的文件以進行日志記錄。寫入此文件的信息類似於-verbose:gc
自每個記錄事件之前的第一個GC事件以來經過的時間的輸出。如果兩者都使用相同的命令,則該-Xloggc
選項將覆蓋。-verbose:gc
java
例:
-Xloggc:垃圾collection.log
-Xmaxjitcodesize =
size
指定JIT編譯代碼的最大代碼高速緩存大小(以字節為單位)。附加字母k
或K
表示千字節,m
或M
指示兆字節,g
或G
指示千兆字節。默認的最大代碼緩存大小為240 MB; 如果使用該選項禁用分層編譯-XX:-TieredCompilation
,則默認大小為48 MB:
-Xmaxjitcodesize =240米
此選項相當於-XX:ReservedCodeCacheSize
。
除了熱方法之外,解釋器執行所有字節碼,熱方法被編譯為本機代碼。
-Xmn 尺寸設置年輕代(托兒所)的堆的初始和最大大小(以字節為單位)。附加字母k
或K
表示千字節,m
或M
指示兆字節,g
或G
指示千兆字節。
堆的年輕代區域用於新對象。GC在該區域比在其他區域更頻繁地進行。如果年輕一代的規模太小,那么將會進行大量的小型垃圾收集。如果大小太大,則只執行完整的垃圾收集,這可能需要很長時間才能完成。Oracle建議您將年輕代的大小保持在整個堆大小的一半到四分之一之間。
以下示例顯示如何使用各種單位將年輕代的初始和最大大小設置為256 MB:
-Xmn256m -Xmn262144k -Xmn268435456
取而代之的是的-Xmn
,為年輕一代都設置堆的初始和最大大小選項,您可以使用-XX:NewSize
設置初始大小和-XX:MaxNewSize
設置的最大尺寸。
設置堆的初始大小(以字節為單位)。該值必須是1024的倍數且大於1 MB。附加字母k
或K
表示千字節,m
或M
指示兆字節,g
或G
指示千兆字節。
以下示例顯示如何使用各種單位將分配的內存大小設置為6 MB:
-Xms6291456 -Xms6144k -Xms6m
如果未設置此選項,則初始大小將設置為為舊代和年輕代分配的大小的總和。可以使用-Xmn
選項或-XX:NewSize
選項設置年輕代的堆的初始大小。
-
指定內存分配池的最大大小(以字節為單位),以字節為單位。該值必須是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
。以下示例顯示如何使用各種單位將分配的內存的最大允許大小設置為80 MB:
-Xmx83886080 -Xmx81920k -Xmx80m
該
-Xmx
選項相當於-XX:MaxHeapSize
。 - -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: 模式
-
設置類數據共享(CDS)模式。此選項的可能模式參數包括以下內容:
- 汽車
-
盡可能使用CDS。這是Java HotSpot 32位客戶端VM的默認值。
- 上
-
需要使用CDS。如果無法使用類數據共享,則打印錯誤消息並退出。
- 離
-
不要使用CDS。這是Java HotSpot 32位服務器VM,Java HotSpot 64位客戶端VM和Java HotSpot 64位服務器VM的默認值。
- 傾倒
-
手動生成CDS存檔。按照“設置類路徑”中的說明指定應用程序類路徑。
您應該使用每個新的JDK版本重新生成CDS存檔。
- -XshowSettings: 類別
-
顯示設置並繼續。此選項的可能類別參數包括以下內容:
- 所有
-
顯示所有類別的設置。這是默認值。
- 現場
-
顯示與區域設置相關的設置。
- 性能
-
顯示與系統屬性相關的設置。
- VM
-
顯示JVM的設置。
- -Xss 大小
-
設置線程堆棧大小(以字節為單位)。附加字母
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: 模式
-
設置字節碼驗證器的模式。字節碼驗證可確保正確形成類文件,並滿足“Java虛擬機規范”中第4.10節“
class
文件驗證”中列出的約束。不要關閉驗證,因為這會減少Java提供的保護,並可能由於格式錯誤的類文件而導致問題。
此選項的可能模式參數包括以下內容:
- 遠程
-
驗證引導類加載器未加載的所有字節碼。如果未指定該
-Xverify
選項,則這是默認行為。 - 所有
-
啟用所有字節碼的驗證。
- 沒有
-
禁用所有字節碼的驗證。使用
-Xverify:none
不受支持。
高級運行時選項
這些選項控制Java HotSpot VM的運行時行為。
-XX:+ CheckEndorsedAndExtDirsjava
如果命令使用了endorsed-standards override機制或擴展機制,則啟用該選項以阻止命令運行Java應用程序。此選項通過檢查以下內容來檢查應用程序是否正在使用這些機制之一:
-
該
java.ext.dirs
或java.endorsed.dirs
系統屬性設置。 -
該
lib/endorsed
目錄存在且不為空。 -
該
lib/ext
目錄包含除JDK之外的任何JAR文件。 -
系統范圍的特定於平台的擴展目錄包含任何JAR文件。
啟用禁用允許工具附加到JVM的機制的選項。默認情況下,該選項被禁用,這意味着連接機制啟用,您可以使用工具,例如jcmd
,jstack
,jmap
,和jinfo
。
指定發生不可恢復的錯誤時寫入錯誤數據的路徑和文件名。默認情況下,此文件在當前工作目錄中創建,並命名為hs_err_pid
pid.log
,其中pid是導致錯誤的進程的標識符。以下示例顯示如何設置默認日志文件(請注意,進程的標識符指定為%p
):
-XX:錯誤文件= / hs_err_pid%p.log
以下示例顯示如何將錯誤日志設置為/var/log/java/java_error.log
:
-XX:錯誤文件= /無功/日志/ 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 = {真|假}
-
指定錄制是連續背景錄制還是在有限時間內運行。默認情況下,此參數設置為
false
(記錄在限定時間內運行)。要使錄制連續運行,請將參數設置為true
。 - 磁盤= {真|假}
-
指定JFR是否應將連續記錄寫入磁盤。默認情況下,此參數設置為
false
(禁用連續錄制到磁盤)。要啟用它,請將參數設置為true
,並設置defaultrecording=true
。 - dumponexit = {真|假}
-
指定當JVM以受控方式終止時是否應生成JFR數據的轉儲文件。默認情況下,此參數設置為
false
(不生成退出時的轉儲文件)。要啟用它,請將參數設置為true
,並設置defaultrecording=true
。轉儲文件將寫入
dumponexitpath
參數定義的位置。 - dumponexitpath = path
-
如果設置
dumponexit=true
參數,則使用JVM以受控方式退出時創建的JFR數據指定轉儲文件的路徑和名稱。只有在設置的情況下才能設置路徑defaultrecording=true
。如果指定的路徑是目錄,則JVM會分配一個顯示創建日期和時間的文件名。如果指定的路徑包含文件名,並且該文件已存在,則JVM通過將日期和時間戳附加到指定的文件名來創建新文件。
- globalbuffersize = size
-
指定用於數據保留的主內存總量(以字節為單位)。追加
k
或K
到指定KB大小,m
或M
以MB為單位指定大小,g
或G
到指定GB的大小。默認情況下,大小設置為462848字節。 - 日志等級= {安靜|錯誤|警告|信息|調試|跟蹤}
-
指定JFR寫入日志文件的數據量。默認情況下,它設置為
info
。 - maxage = 時間
-
指定要為默認錄制保留的磁盤數據的最長期限。附加
s
以指定以秒m
為單位的時間,分鍾,h
小時或d
天數(例如,指定30s
表示30秒)。默認情況下,最大年齡設置為15分鍾(15m
)。僅當您設置
disk=true
參數時,此參數才有效。 - maxchunksize = size
-
指定記錄中數據塊的最大大小(以字節為單位)。追加
k
或K
到指定KB大小,m
或M
以MB為單位指定大小,g
或G
到指定GB的大小。默認情況下,數據塊的最大大小設置為12 MB。 - maxsize = size
-
指定要為默認記錄保留的磁盤數據的最大大小(以字節為單位)。追加
k
或K
到指定KB大小,m
或M
以MB為單位指定大小,g
或G
到指定GB的大小。默認情況下,磁盤數據的最大大小不受限制,此參數設置為0。僅當您設置
disk=true
參數時,此參數才有效。 - repository = path
-
指定臨時磁盤存儲的存儲庫(目錄)。默認情況下,使用系統的臨時目錄。
- samplethreads = {真|假}
-
指定是否啟用線程采樣。僅當采樣事件與此參數一起啟用時,才會進行線程采樣。默認情況下,啟用此參數。
- settings = path
-
指定事件設置文件的路徑和名稱(類型為JFC)。默認情況下,使用該
default.jfc
文件,該文件位於JAVA_HOME/jre/lib/jfr
。 - stackdepth = 深度
-
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本機內存使用情況的模式。此選項的可能模式參數包括以下內容:
- 離
-
不跟蹤JVM本機內存使用情況。如果未指定該
-XX:NativeMemoryTracking
選項,則這是默認行為。 - 摘要
-
僅跟蹤JVM子系統的內存使用情況,例如Java堆,類,代碼和線程。
- 詳情
-
除了跟蹤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
選項的說明。
-
如果啟用,則在Java應用程序退出時保存
jstat
(1)二進制數據。此二進制數據保存在名為的文件中hsperfdata_
<pid>
,其中<pid>
是您運行的Java應用程序的進程標識符。使用jstat
如下顯示包含在該文件中的性能數據:jstat -class file:/// <path> / hsperfdata_ <pid> jstat -gc file:/// <path> / hsperfdata_ <pid>
- -XX:+ PrintCommandLineFlags
-
允許打印出現在命令行上的符合人體工程學選擇的JVM標志。了解JVM設置的人體工程學值(例如堆空間大小和選定的垃圾收集器)可能很有用。默認情況下,禁用此選項並且不打印標志。
- -XX:+ PrintNMTStatistics
-
當啟用本機內存跟蹤時,允許在JVM出口處打印收集的本機內存跟蹤數據(請參閱參考資料
-XX:NativeMemoryTracking
)。默認情況下,禁用此選項並且不打印本機內存跟蹤數據。 - -XX:+ RelaxAccessControlCheck
-
減少驗證程序中訪問控制檢查的數量。默認情況下,此選項被禁用,對於具有最新字節碼版本的類,它將被忽略(即,視為已禁用)。您可以為具有舊版字節碼的類啟用它。
- -XX:+ ResourceManagement
-
在應用程序的運行時期間啟用資源管理。
這是一項商業功能,需要您還指定
-XX:+UnlockCommercialFeatures
選項,如下所示:java -XX:+UnlockCommercialFeatures -XX:+ResourceManagement
- -XX:ResourceManagementSampleInterval = value (毫秒)
-
設置控制資源管理測量的采樣間隔的參數,以毫秒為單位。
僅當啟用資源管理(即
-XX:+ResourceManagement
指定選項)時,才能使用此選項。 - -XX:SharedArchiveFile = path
-
指定類數據共享(CDS)歸檔文件的路徑和名稱
- -XX:SharedClassListFile = file_name
-
指定包含要存儲在類數據共享(CDS)存檔中的類文件名稱的文本文件。此文件包含每行一個類文件的全名,但斜杠(
/
)替換dots(.
)除外。例如,指定類java.lang.Object
和hello.Main
,創建一個包含以下兩行的文本文件:java / lang / Object hello / Main
您在此文本文件中指定的類文件應包含應用程序常用的類。它們可以包括應用程序,擴展或引導類路徑中的任何類。
- -XX:+ ShowMessageBoxOnError
-
當JVM遇到無法恢復的錯誤時,允許顯示對話框。這可以防止JVM退出並使進程保持活動狀態,以便您可以將調試器附加到它以調查錯誤原因。默認情況下,禁用此選項。
- -XX:StartFlightRecording = parameter = value
-
啟動Java應用程序的JFR記錄。這是一個與
-XX:+UnlockCommercialFeatures
選項配合使用的商業功能。此選項等同於JFR.start
在運行時啟動記錄的診斷命令。您可以在開始JFR錄制時設置以下參數:- 壓縮= {真|假}
-
指定是否使用
gzip
文件壓縮實用程序壓縮磁盤上的JFR記錄日志文件(JFR類型)。僅當filename
指定參數時,此參數才有效。默認設置為false
(記錄未壓縮)。要啟用壓縮,請將參數設置為true
。 - defaultrecording = {真|假}
-
指定錄制是連續背景錄制還是在有限時間內運行。默認情況下,此參數設置為
false
(記錄在限定時間內運行)。要使錄制連續運行,請將參數設置為true
。 - 延遲= 時間
-
指定Java應用程序啟動時間和記錄開始之間的延遲。附加
s
以指定以秒m
為單位的時間,分鍾,h
小時或d
天數(例如,指定10m
表示10分鍾)。默認情況下,沒有延遲,此參數設置為0。 - dumponexit = {真|假}
-
指定當JVM以受控方式終止時是否應生成JFR數據的轉儲文件。默認情況下,此參數設置為
false
(不生成退出時的轉儲文件)。要啟用它,請將參數設置為true
。轉儲文件將寫入
filename
參數定義的位置。例:
-XX:StartFlightRecording =名=測試中,文件名= d:\ test.jfr,dumponexit =真
- 持續時間= 時間
-
指定錄制的持續時間。附加
s
以指定以秒m
為單位的時間,分鍾,h
小時或d
天數(例如,指定5h
表示5小時)。默認情況下,持續時間不受限制,此參數設置為0。 - filename = path
-
指定JFR記錄日志文件的路徑和名稱。
- name = 標識符
-
指定JFR記錄的標識符。默認情況下,它設置為
Recording x
。 - maxage = 時間
-
指定要為默認錄制保留的磁盤數據的最長期限。附加
s
以指定以秒m
為單位的時間,分鍾,h
小時或d
天數(例如,指定30s
表示30秒)。默認情況下,最大年齡設置為15分鍾(15m
)。 - maxsize = size
-
指定要為默認記錄保留的磁盤數據的最大大小(以字節為單位)。追加
k
或K
到指定KB大小,m
或M
以MB為單位指定大小,g
或G
到指定GB的大小。默認情況下,磁盤數據的最大大小不受限制,此參數設置為0。 - settings = path
-
指定事件設置文件的路徑和名稱(類型為JFC)。默認情況下,使用該
default.jfc
文件,該文件位於JAVA_HOME/jre/lib/jfr
。
您可以通過用逗號分隔多個參數的值來指定它們。例如,要將記錄保存到當前工作目錄中的test.jfr,並指示JFR壓縮日志文件,請指定以下內容:
-XX:StartFlightRecording =文件名= 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
-
允許使用商業功能。Oracle Java SE Advanced或Oracle Java SE Suite軟件包中包含商業功能,如Java SE產品頁面中所定義
http://www.oracle.com/technetwork/java/javase/terms/products/index.html
默認情況下,此選項被禁用,JVM在沒有商業功能的情況下運行。一旦為JVM進程啟用了它們,就無法禁用它們用於該進程。
如果未提供此選項,則仍可使用相應的
jcmd
診斷命令在正在運行的JVM中解鎖商業功能。 - -XX:+ UseAltSigs
-
使得能夠使用替代信號,而不是
SIGUSR1
和SIGUSR2
用於JVM內部信號。默認情況下,此選項被禁用,並且不使用替代信號。此選項相當於-Xusealtsigs
。 - -XX:+ UseAppCDS
-
啟用應用程序類數據共享(AppCDS)。要使用AppCDS,還必須指定選項的值
-XX:SharedClassListFile
和-XX:SharedArchiveFile
兩個CDS在轉儲時間(見選項-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
-
允許在線程狀態轉換上發布membars。默認情況下,在除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 = lines
-
設置在實例分配指針之前預取的行數。默認情況下,預取的行數設置為1:
-XX:AllocateInstancePrefetchLines = 1
只有Java HotSpot Server VM支持此選項。
- -XX:AllocatePrefetchDistance = size
-
設置對象分配的預取距離的大小(以字節為單位)。將從最后分配的對象的地址開始預取將要使用新對象的值寫入的內存。每個Java線程都有自己的分配點。
負值表示基於平台選擇預取距離。正值是預取的字節數。附加字母
k
或K
表示千字節,m
或M
指示兆字節,g
或G
指示千兆字節。默認值設置為-1。以下示例顯示如何將預取距離設置為1024字節:
-XX:AllocatePrefetchDistance = 1024
只有Java HotSpot Server VM支持此選項。
- -XX:AllocatePrefetchInstr = 指令
-
將預取指令設置為在分配指針之前預取。只有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 = threads
-
設置用於編譯的編譯器線程數。默認情況下,服務器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 =排除,爪哇/郎/ String.indexOf
請注意,指定了完整的類名,包括由斜杠(
/
)分隔的所有包和子包。為了便於剪切和粘貼操作,還可以使用-XX:+PrintCompilation
和-XX:+LogCompilation
選項生成的方法名稱格式:-XX:CompileCommand =排除,java.lang.String中的indexOf ::
如果在沒有簽名的情況下指定方法,則該命令將應用於具有指定名稱的所有方法。但是,您也可以在類文件格式中指定方法的簽名。在這種情況下,您應該將參數括在引號中,否則shell會將分號視為命令end。例如,如果要僅排除編譯類的
indexOf(String)
方法String
,請使用以下命令:-XX:CompileCommand = “排除,爪哇/郎/ String.indexOf,(Ljava /郎/字符串;)I”
您還可以使用星號(*)作為類和方法名稱的通配符。例如,要排除
indexOf()
編譯所有類中的所有方法,請使用以下命令:-XX:CompileCommand =排除*的indexOf。
逗號和句點是空格的別名,使得通過shell傳遞編譯器命令更容易。您可以通過
-XX:CompileCommand
將參數括在引號中來將參數傳遞給使用空格作為分隔符:-XX:CompileCommand =“exclude java / lang / String indexOf”
請注意,在使用
-XX:CompileCommand
選項解析在命令行上傳遞的命令之后,JIT編譯器會從.hotspot_compiler
文件中讀取命令。您可以向此文件添加命令,也可以使用該-XX:CompileCommandFile
選項指定其他文件。要添加多個命令,請
-XX:CompileCommand
多次指定該選項,或使用換行符分隔符(\n
)分隔每個參數。可以使用以下命令:- 打破
-
在調試JVM時設置斷點,以便在編譯指定方法的開始時停止。
- compileonly
-
除了指定的方法之外,從編譯中排除所有方法。作為替代方法,您可以使用該
-XX:CompileOnly
選項,該選項允許指定多種方法。 - dontinline
-
防止內聯指定的方法。
- 排除
-
從編譯中排除指定的方法。
- 救命
-
打印該
-XX:CompileCommand
選項的幫助消息。 - 排隊
-
嘗試內聯指定的方法。
- 日志
-
排除
-XX:+LogCompilation
除指定方法之外的所有方法的編譯日志記錄(帶選項)。默認情況下,對所有已編譯的方法執行日志記錄。 - 選項
-
此命令可用於將JIT編譯選項傳遞給指定的方法以代替最后一個參數(選項)。編譯選項在方法名稱后面的末尾設置。例如,要啟用類方法的
BlockLayoutByFrequency
選項,請使用以下命令:append()
StringBuffer
-XX:CompileCommand =選項,爪哇/郎/的StringBuffer.append,BlockLayoutByFrequency
您可以指定多個編譯選項,以逗號或空格分隔。
- 打印
-
在編譯指定方法后打印生成的匯編代碼。
- 安靜
-
不要打印編譯命令。默認情況下,使用 -
XX:CompileCommand
選項指定的命令將被打印; 例如,如果從編譯中排除類的indexOf()
方法String
,則以下內容將打印到標准輸出:CompilerOracle:排除java / lang / String.indexOf
您可以通過
-XX:CompileCommand=quiet
在其他選項之前指定選項來抑制此操作-XX:CompileCommand
。
- -XX:CompileCommandFile = filename
-
設置從中讀取JIT編譯器命令的文件。默認情況下,該
.hotspot_compiler
文件用於存儲JIT編譯器執行的命令。命令文件中的每一行代表一個命令,一個類名和一個使用該命令的方法名。例如,此行打印類的
toString()
方法的匯編代碼String
:print java / lang / String toString
有關為JIT編譯器指定要對方法執行的命令的更多信息,請參閱該
-XX:CompileCommand
選項。 - -XX:CompileOnly = 方法
-
設置應限制編譯的方法列表(以逗號分隔)。僅編譯指定的方法。使用完整的類名(包括包和子包)指定每個方法。例如,為了僅編譯
length()
所述的方法String
類和size()
所述的方法List
類,使用以下:-XX:CompileOnly =爪哇/郎/ string.length減,JAVA / UTIL /則為list.size
請注意,指定了完整的類名,包括由斜杠(
/
)分隔的所有包和子包。為了便於剪切和粘貼操作,還可以使用-XX:+PrintCompilation
和-XX:+LogCompilation
選項生成的方法名稱格式:-XX:CompileOnly = java.lang.String中::長度,java.util.List中::大小
雖然不支持通配符,但您只能指定類或包名稱來編譯該類或包中的所有方法,並且只指定在任何類中使用此名稱編譯方法的方法:
-XX:CompileOnly = java / lang / String -XX:CompileOnly = java / lang -XX:CompileOnly = .length
- -XX:CompileThreshold = 調用
-
設置編譯前解釋的方法調用的數量。默認情況下,在服務器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 = 節點
-
設置單個方法編譯期間要使用的最大節點數。默認情況下,最大節點數設置為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標志,僅支持Java HotSpot Server VM 32位和64位。要禁用基於硬件的AES內在函數,請指定
-XX:-UseAES -XX:-UseAESIntrinsics
。例如,要啟用硬件AES,請使用以下標志:-XX:+ UseAES -XX:+ UseAESIntrinsics
支持使用32位和64位的UseAES和UseAESIntrinsics標志
-server
選項來選擇Java HotSpot Server VM。客戶端VM不支持這些標志。 - -XX:+ UseCodeCacheFlushing
-
在關閉編譯器之前啟用刷新代碼緩存。默認情況下啟用此選項。要在關閉編譯器之前禁用刷新代碼緩存,請指定
-XX:-UseCodeCacheFlushing
。 - -XX:+ UseCondCardMark
-
在更新卡表之前,可以檢查卡是否已經標記。默認情況下禁用此選項,並且只應在具有多個套接字的計算機上使用此選項,從而提高嚴重依賴並發操作的Java應用程序的性能。只有Java HotSpot Server VM支持此選項。
- -XX:+ UseRTMDeopt
-
根據中止率自動調諧RTM鎖定。該比率由
-XX:RTMAbortRatio
選項指定。如果中止事務的數量超過中止率,則包含鎖定的方法將被取消優化並重新編譯,並將所有鎖定為正常鎖定。默認情況下禁用此選項。-XX:+UseRTMLocking
必須啟用該選項。 - -XX:+ UseRTMLocking
-
為所有膨脹的鎖生成受限制的事務性內存(RTM)鎖定代碼,使用正常的鎖定機制作為回退處理程序。默認情況下禁用此選項。與RTM相關的選項僅適用於支持事務同步擴展(TSX)的x86 CPU上的Java HotSpot Server VM。
RTM是英特爾TSX的一部分,它是x86指令集擴展,有助於創建多線程應用程序。RTM引入了新的指示
XBEGIN
,XABORT
,XEND
,和XTEST
。該XBEGIN
和XEND
說明附上一組指令作為一個事務中運行。如果在運行事務時未發現沖突,則內存和寄存器修改將在XEND
指令處一起提交。該XABORT
指令可用於顯式中止事務以及XEND
檢查是否在事務中運行一組指令的指令。當另一個線程嘗試訪問同一事務時,對事務的鎖定會膨脹,從而阻止最初未請求訪問該事務的線程。RTM要求在事務中止或失敗時指定后備操作集。RTM鎖是一種委托給TSX系統的鎖。
RTM提高了在關鍵區域中具有低沖突的高競爭鎖的性能(這是不能同時由多個線程訪問的代碼)。RTM還提高了粗粒度鎖定的性能,這在多線程應用程序中通常表現不佳。(粗粒度鎖定是長時間保持鎖定以最小化獲取和釋放鎖定的開銷的策略,而細粒度鎖定是通過僅在必要時鎖定並盡快解鎖來嘗試實現最大並行性的策略。此外,對於不同線程使用的輕度爭用鎖,RTM可以減少錯誤的緩存行共享,也稱為緩存行乒乓。當來自不同處理器的多個線程訪問不同的資源時會發生 但資源共享相同的緩存行。結果,處理器重復地使其他處理器的高速緩存行無效,這迫使它們從主存儲器而不是它們的高速緩存讀取。
- -XX:+ UseSHA
-
為SPARC硬件啟用SHA加密散列函數的基於硬件的內在函數。
UseSHA
與結合使用UseSHA1Intrinsics
,UseSHA256Intrinsics
和UseSHA512Intrinsics
選項。在
UseSHA
和UseSHA*Intrinsics
標志默認情況下啟用,並且僅適用於SPARC T4和新的Java HotSpot的服務器虛擬機的64位支持。此功能僅在使用
sun.security.provider.Sun
SHA操作的提供程序時適用。要禁用所有基於硬件的SHA內在函數,請指定
-XX:-UseSHA
。要僅禁用特定的SHA內在函數,請使用相應的相應選項。例如:-XX:-UseSHA256Intrinsics
。 - -XX:+ UseSHA1Intrinsics
-
為SHA-1加密哈希函數啟用內在函數。
- -XX:+ UseSHA256Intrinsics
-
為SHA-224和SHA-256加密哈希函數啟用內在函數。
- -XX:+ UseSHA512Intrinsics
-
為SHA-384和SHA-512加密散列函數啟用內在函數。
- -XX:+ UseSuperWord
-
允許將標量操作轉換為超級字操作。默認情況下啟用此選項。要禁用將標量操作轉換為超級字操作,請指定
-XX:-UseSuperWord
。只有Java HotSpot Server VM支持此選項。
高級可維護性選項
這些選項提供了收集系統信息和執行大量調試的功能。
- -XX:+ ExtendedDTraceProbes
-
啟用
dtrace
影響性能的其他工具探測。默認情況下,此選項已禁用,dtrace
僅執行標准探測。 - -XX:+ HeapDumpOnOutOfMemoryError
-
在
java.lang.OutOfMemoryError
拋出異常時,通過使用堆分析器(HPROF)將Java堆轉儲到當前目錄中的文件。您可以使用該-XX:HeapDumpPath
選項顯式設置堆轉儲文件路徑和名稱。默認情況下,禁用此選項,並在OutOfMemoryError
拋出異常時不轉儲堆。 - -XX:HeapDumpPath = path
-
設置
-XX:+HeapDumpOnOutOfMemoryError
選項設置時,設置用於寫入堆分析器(HPROF)提供的堆轉儲的路徑和文件名。默認情況下,該文件在當前工作目錄中創建,並且名為java_pid
pid.hprof
,其中pid是導致錯誤的進程的標識符。以下示例顯示如何顯式設置默認文件(%p
表示當前進程標識符):-XX:HeapDumpPath = / java_pid%p.hprof
以下示例顯示如何將堆轉儲文件設置為
/var/log/java/java_heapdump.hprof
:-XX:HeapDumpPath = /無功/日志/ JAVA / java_heapdump.hprof
- -XX:LogFile = path
-
設置寫入日志數據的路徑和文件名。默認情況下,該文件在當前工作目錄中創建,並以其命名
hotspot.log
。以下示例顯示如何將日志文件設置為
/var/log/java/hotspot.log
:-XX:日志文件= /無功/日志/ JAVA / hotspot.log
- -XX:+ PrintClassHistogram
-
在
Control+C
事件(SIGTERM
)之后啟用類實例直方圖的打印。默認情況下,禁用此選項。設置此選項等同於運行
jmap -histo
命令或jcmd
pidGC.class_histogram
命令,其中pid是當前Java進程標識符。 - -XX:+ PrintConcurrentLocks
-
java.util.concurrent
在Control+C
事件(SIGTERM
)之后啟用鎖的打印。默認情況下,禁用此選項。設置此選項等同於運行
jstack -l
命令或jcmd
pidThread.print -l
命令,其中pid是當前Java進程標識符。 - -XX:+ UnlockDiagnosticVMOptions
-
解鎖用於診斷JVM的選項。默認情況下,此選項已禁用,診斷選項不可用。
高級垃圾收集選項
這些選項控制Java HotSpot VM如何執行垃圾收集(GC)。
-XX:+ AggressiveHeap啟用Java堆優化。根據計算機的配置(RAM和CPU),這會將各種參數設置為具有密集內存分配的長時間運行作業的最佳選擇。默認情況下,禁用該選項並且不優化堆。
-XX:+ AlwaysPreTouch在JVM初始化期間允許觸摸Java堆上的每個頁面。這會在進入main()
方法之前將所有頁面放入內存中。該選項可用於測試以模擬長時間運行的系統,其中所有虛擬內存都映射到物理內存。默認情況下,禁用此選項,並將所有頁面作為JVM堆空間填充提交。
使用並發標記清除(CMS)垃圾收集器時啟用類卸載。默認情況下啟用此選項。要禁用CMS垃圾收集器的類卸載,請指定-XX:-CMSClassUnloadingEnabled
。
設置在計算並發收集統計信息的指數平均值時用於加權當前樣本的時間百分比(0到100)。默認情況下,指數平均值因子設置為25%。以下示例顯示如何將因子設置為15%:
-XX:CMSExpAvgFactor = 15
-XX:CMSInitiatingOccupancyFraction =
百分比
設置啟動CMS收集周期的舊代占用率(0到100)的百分比。默認值設置為-1。任何負值(包括默認值)都意味着-XX:CMSTriggerRatio
用於定義初始占用率的值。
以下示例顯示如何將占用率設置為20%:
-XX:CMSInitiatingOccupancyFraction = 20
-XX:+ CMSScavengeBeforeRemark
在CMS備注步驟之前啟用清理嘗試。默認情況下,禁用此選項。
-XX:CMSTriggerRatio = 百分比設置在-XX:MinHeapFreeRatio
CMS收集周期開始之前分配的值所指定的值的百分比(0到100)。默認值設置為80%。
以下示例顯示如何將占用率設置為75%:
-XX:CMSTriggerRatio = 75
-XX:ConcGCThreads =
threads
設置用於並發GC的線程數。默認值取決於JVM可用的CPU數。
例如,要將並發GC的線程數設置為2,請指定以下選項:
-XX:ConcGCThreads = 2
-XX:+ DisableExplicitGC
啟用禁用處理呼叫的選項System.gc()
。默認情況下禁用此選項,這意味着System.gc()
將處理調用。如果System.gc()
禁用了對調用的處理,則JVM在必要時仍會執行GC。
允許使用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 = 百分比設置保留為false上限的堆的百分比(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:+UseParallelOldGC
選項,默認情況下使用吞吐量垃圾收集器啟用自適應調整,並根據應用程序行為調整幸存者空間,從初始值開始。如果禁用自適應大小調整(使用該-XX:-UseAdaptiveSizePolicy
選項),-XX:SurvivorRatio
則應使用該選項為整個應用程序執行設置幸存者空間的大小。以下公式可用於根據年輕一代的大小(Y)和初始幸存者空間比率(R)計算幸存者空間(S)的初始大小:
S = Y /(R + 2)
等式中的2表示兩個幸存者空間。指定為初始幸存者空間比的值越大,初始幸存者空間大小越小。
默認情況下,初始幸存者空間比率設置為8.如果使用年輕代空間大小的默認值(2 MB),則幸存者空間的初始大小將為0.2 MB。
以下示例顯示如何將初始幸存者空間比率設置為4:
-XX:InitialSurvivorRatio = 4
- -XX:InitiatingHeapOccupancyPercent = 百分比
-
設置啟動並發GC循環的堆占用百分比(0到100)。它由垃圾收集器使用,它根據整個堆的占用而觸發並發GC循環,而不僅僅是其中一代(例如,G1垃圾收集器)。
默認情況下,初始值設置為45%。值0表示不間斷的GC循環。以下示例顯示如何將啟動堆占用率設置為75%:
-XX:InitiatingHeapOccupancyPercent = 75
- -XX:MaxGCPauseMillis = 時間
-
設置最大GC暫停時間的目標(以毫秒為單位)。這是一個軟目標,JVM將盡最大努力實現它。默認情況下,沒有最大暫停時間值。
以下示例顯示如何將最大目標暫停時間設置為500毫秒:
-XX:MaxGCPauseMillis = 500
- -XX:MaxHeapSize = size
-
設置內存分配池的最大大小(以字節為單位)。該值必須是1024的倍數且大於2 MB。附加字母
k
或K
表示千字節,m
或M
指示兆字節,g
或G
指示千兆字節。根據系統配置在運行時選擇默認值。對於服務器部署,-XX:InitialHeapSize
並-XX:MaxHeapSize
經常設置為相同的值。請參閱Java SE HotSpot虛擬機垃圾收集調整指南中的“人體工程學”部分http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html
。以下示例顯示如何使用各種單位將分配的內存的最大允許大小設置為80 MB:
-XX:MaxHeapSize = 83886080 -XX:MaxHeapSize = 81920k -XX:MaxHeapSize = 80m
在Oracle Solaris 7和Oracle Solaris 8 SPARC平台上,此值的上限約為4,000 MB減去間接費用金額。在Oracle Solaris 2.6和x86平台上,上限約為2,000 MB減去間接費用金額。在Linux平台上,上限約為2,000 MB減去間接費用金額。
該
-XX:MaxHeapSize
選項相當於-Xmx
。 - -XX:MaxHeapFreeRatio = 百分比
-
設置GC事件后允許的最大空閑堆空間百分比(0到100)。如果可用堆空間擴展到此值以上,則堆將縮小。默認情況下,此值設置為70%。
以下示例顯示如何將最大可用堆比率設置為75%:
-XX:MaxHeapFreeRatio = 75
- -XX:MaxMetaspaceSize = size
-
設置可以為類元數據分配的最大本機內存量。默認情況下,大小不受限制。應用程序的元數據量取決於應用程序本身,其他正在運行的應用程序以及系統上可用的內存量。
以下示例顯示如何將最大類元數據大小設置為256 MB:
-XX:MaxMetaspaceSize =256米
- -XX:MaxNewSize = size
-
設置年輕代(托兒所)的堆的最大大小(以字節為單位)。默認值按人體工程學設置。
- -XX:MaxTenuringThreshold = threshold
-
設置自適應GC大小調整中使用的最大暫定閾值。最大值為15.並行(吞吐量)收集器的默認值為15,CMS收集器的默認值為6。
以下示例顯示如何將最大期限閾值設置為10:
-XX:MaxTenuringThreshold = 10
- -XX:MetaspaceSize = size
-
設置分配的類元數據空間的大小,該空間將在第一次超出時觸發垃圾回收。根據使用的元數據量,增加或減少垃圾收集的閾值。默認大小取決於平台。
- -XX:MinHeapFreeRatio = 百分比
-
設置GC事件后允許的最小空閑堆空間百分比(0到100)。如果可用堆空間低於此值,則將擴展堆。默認情況下,此值設置為40%。
以下示例顯示如何將最小可用堆比率設置為25%:
-XX:MinHeapFreeRatio = 25
- -XX:NewRatio = ratio
-
設置年輕和老一代尺寸之間的比率。默認情況下,此選項設置為2.以下示例顯示如何將年輕/舊比率設置為1:
-XX:NewRatio = 1
- -XX:NewSize = size
-
設置年輕代(托兒所)的堆的初始大小(以字節為單位)。附加字母
k
或K
表示千字節,m
或M
指示兆字節,g
或G
指示千兆字節。堆的年輕代區域用於新對象。GC在該區域比在其他區域更頻繁地進行。如果年輕一代的規模太小,那么將會執行大量的小型GC。如果尺寸太大,則只會執行完整的GC,這可能需要很長時間才能完成。Oracle建議您將年輕代的大小保持在整個堆大小的一半到四分之一之間。
以下示例顯示如何使用各種單位將年輕代的初始大小設置為256 MB:
-XX:NewSize = 256m -XX:NewSize = 262144k -XX:NewSize = 268435456
該
-XX:NewSize
選項相當於-Xmn
。 - -XX:ParallelGCThreads = threads
-
設置用於年輕和老年代的並行垃圾收集的線程數。默認值取決於JVM可用的CPU數。
例如,要將並行GC的線程數設置為2,請指定以下選項:
-XX:ParallelGCThreads = 2
- -XX:+ ParallelRefProcEnabled
-
啟用並行參考處理。默認情況下,禁用此選項。
- -XX:+ PrintAdaptiveSizePolicy
-
允許打印有關自適應生成大小的信息。默認情況下,禁用此選項。
- -XX:+ PrintGC
-
允許在每個GC上打印消息。默認情況下,禁用此選項。
- -XX:+ PrintGCApplicationConcurrentTime
-
允許打印自上次暫停后經過的時間(例如,GC暫停)。默認情況下,禁用此選項。
- -XX:+ PrintGCApplicationStoppedTime
-
允許打印暫停(例如,GC暫停)持續多長時間。默認情況下,禁用此選項。
- -XX:+ PrintGCDateStamps
-
允許在每個GC上打印日期戳。默認情況下,禁用此選項。
- -XX:+ PrintGCDetails
-
允許在每個GC上打印詳細消息。默認情況下,禁用此選項。
- -XX:+ PrintGCTaskTimeStamps
-
允許為每個GC工作線程任務打印時間戳。默認情況下,禁用此選項。
- -XX:+ PrintGCTimeStamps
-
允許在每個GC上打印時間戳。默認情況下,禁用此選項。
- -XX:+ PrintStringDeduplicationStatistics
-
打印詳細的重復數據刪除統計信息。默認情況下,禁用此選項。請參閱
-XX:+UseStringDeduplication
選項。 - -XX:+ PrintTenuringDistribution
-
允許打印終身年齡信息。以下是輸出的示例:
期望的幸存者大小48286924字節,新閾值10(最大10) - 年齡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 = 時間
-
設置軟件可訪問對象在上次引用后在堆上保持活動狀態的時間(以毫秒為單位)。默認值是堆中每個可用兆字節的生存期的一秒。該
-XX:SoftRefLRUPolicyMSPerMB
選項接受整數值,表示每兆字節當前堆大小(對於Java HotSpot客戶端VM)的毫秒數或最大可能堆大小(對於Java HotSpot Server VM)。這種差異意味着客戶端VM傾向於刷新軟引用而不是增加堆,而服務器VM傾向於增加堆而不是刷新軟引用。在后一種情況下,-Xmx
選項的值對軟引用的垃圾收集速度有顯着影響。以下示例顯示如何將值設置為2.5秒:
-XX:SoftRefLRUPolicyMSPerMB = 2500
- -XX:StringDeduplicationAgeThreshold = threshold
-
String
達到指定年齡的對象被視為重復數據刪除的候選對象。對象的年齡是對垃圾收集存活多少次的度量。這有時被稱為終身; 看到-XX:+PrintTenuringDistribution
選項。請注意,String
在達到此年齡之前提升到舊堆區域的對象始終被視為重復數據刪除的候選對象。此選項的默認值為3
。請參閱-XX:+UseStringDeduplication
選項。 - -XX:SurvivorRatio = 比率
-
設置伊甸園空間大小與幸存者空間大小之間的比率。默認情況下,此選項設置為8.以下示例顯示如何將eden / survivor空間比率設置為4:
-XX:SurvivorRatio = 4
- -XX:TargetSurvivorRatio = 百分比
-
設置年輕垃圾收集后使用的幸存者空間(0到100)的所需百分比。默認情況下,此選項設置為50%。
以下示例顯示如何將目標幸存者空間比率設置為30%:
-XX:TargetSurvivorRatio = 30
- -XX:TLABSize = size
-
設置線程局部分配緩沖區(TLAB)的初始大小(以字節為單位)。附加字母
k
或K
表示千字節,m
或M
指示兆字節,g
或G
指示千兆字節。如果此選項設置為0,則JVM會自動選擇初始大小。以下示例顯示如何將初始TLAB大小設置為512 KB:
-XX:TLABSize = 512K
- -XX:+ UseAdaptiveSizePolicy
-
允許使用自適應生成大小。默認情況下啟用此選項。要禁用自適應生成大小調整,請明確指定
-XX:-UseAdaptiveSizePolicy
和設置內存分配池的大小(請參閱-XX:SurvivorRatio
選項)。 - -XX:+ UseCMSInitiatingOccupancyOnly
-
允許使用占用值作為啟動CMS收集器的唯一標准。默認情況下,此選項已禁用,可能會使用其他條件。
- -XX:+ UseConcMarkSweepGC
-
允許為舊一代使用CMS垃圾收集器。Oracle建議您在spam(
-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上花費的時間比例。默認情況下,此選項處於啟用狀態,OutOfMemoryError
如果將超過98%的總時間花在垃圾回收上並且回收的堆少於2%,則並行GC將拋出該選項。當堆很小時,此功能可用於防止應用程序長時間運行,幾乎沒有進展。要禁用此選項,請指定-XX:-UseGCOverheadLimit
。 - -XX:+ UseNUMA
-
通過增加應用程序對低延遲內存的使用,在具有非均勻內存架構(NUMA)的計算機上實現應用程序的性能優化。默認情況下,此選項被禁用,並且不會對NUMA進行優化。該選項僅在使用並行垃圾收集器時可用(
-XX:+UseParallelGC
)。 - -XX:+ UseParallelGC
-
允許使用並行清除垃圾收集器(也稱為吞吐量收集器),通過利用多個處理器來提高應用程序的性能。
默認情況下,禁用此選項,並根據計算機的配置和JVM的類型自動選擇收集器。如果已啟用,則會
-XX:+UseParallelOldGC
自動啟用該選項,除非您明確禁用它。 - -XX:+ UseParallelOldGC
-
允許將並行垃圾收集器用於完整的GC。默認情況下,禁用此選項。啟用它會自動啟用該
-XX:+UseParallelGC
選項。 - -XX:+ UseParNewGC
-
允許在年輕一代中使用並行線程進行收集。默認情況下,禁用此選項。設置
-XX:+UseConcMarkSweepGC
選項時會自動啟用它。使用-XX:+UseParNewGC
不帶選項-XX:+UseConcMarkSweepGC
的選擇是在JDK 8棄用。 - -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 = 百分比
-
設置允許並發收集器運行的次要集合之間的時間百分比(0到100)。在棄用選項后,此選項在JDK 8中已棄用,沒有替換
-XX:+CMSIncrementalMode
。 - -XX:CMSIncrementalDutyCycleMin = 百分比
-
設置次要集合之間的時間百分比(0到100),它
-XX:+CMSIncrementalPacing
是啟用時占空比的下限。在棄用選項后,此選項在JDK 8中已棄用,沒有替換-XX:+CMSIncrementalMode
。 - -XX:+ CMSIncrementalMode
-
啟用CMS收集器的增量模式。此選項在JDK 8中已棄用,沒有替換,以及其他選項
CMSIncremental
。 - -XX:CMSIncrementalOffset = 百分比
-
設置增量模式占空比在次要集合之間的時間段內向右移動的時間百分比(0到100)。在棄用選項后,此選項在JDK 8中已棄用,沒有替換
-XX:+CMSIncrementalMode
。 - -XX:+ CMSIncrementalPacing
-
根據JVM運行時收集的統計信息,啟用增量模式占空比的自動調整。在棄用選項后,此選項在JDK 8中已棄用,沒有替換
-XX:+CMSIncrementalMode
。 - -XX:CMSIncrementalSafetyFactor = 百分比
-
設置計算占空比時用於添加保守性的時間百分比(0到100)。在棄用選項后,此選項在JDK 8中已棄用,沒有替換
-XX:+CMSIncrementalMode
。 - -XX:CMSInitiatingPermOccupancyFraction = 百分比
-
設置啟動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中刪除,無需替換。