jdk8 jvm配置參數說明

這些選項是特定於Java HotSpot虛擬機的通用選項。 -X

顯示全部可用-X選項的幫助html

-Xbatch

禁用後臺編譯。默認狀況下,JVM將該方法編譯爲後臺任務,以解釋器模式運行該方法,直到後臺編譯完成。-Xbatch標誌禁用後臺編譯,以便全部方法的編譯做爲前臺任務繼續進行,直到完成。java

此選項至關於-XX:-BackgroundCompilationshell

-Xbootclasspath: path

指定以冒號(:)分隔的目錄,JAR文件和ZIP存檔的列表,以搜索引導類文件。這些用於代替JDK中包含的引導類文件。數據庫

不要部署使用此選項的應用程序覆蓋類rt.jar,由於這違反了JRE二進制代碼許可證。數組

-Xbootclasspath / a: path

指定以冒號(:)分隔的目錄,JAR文件和ZIP存檔的列表,以附加到默認引導類路徑的末尾。緩存

不要部署使用此選項的應用程序覆蓋類rt.jar,由於這違反了JRE二進制代碼許可證。sass

-Xbootclasspath / p: path

指定以冒號(:)分隔的目錄,JAR文件和ZIP存檔的列表,以預先添加到默認引導程序類路徑的前面。性能優化

不要部署使用此選項的應用程序覆蓋類rt.jar,由於這違反了JRE二進制代碼許可證。服務器

-Xcheck:JNI

對Java Native Interface(JNI)函數執行其餘檢查。具體來講,它在處理JNI請求以前驗證傳遞給JNI函數的參數和運行時環境數據。遇到的任何無效數據都代表本機代碼存在問題,在這種狀況下,JVM將以沒法恢復的錯誤終止。使用此選項時,預計性能會降低。多線程

-Xcomp

在第一次調用時強制編譯方法。默認狀況下,客戶端VM(-client)執行1,000個已解釋的方法調用,Server 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  尺寸

設置年輕代(託兒所)的堆的初始和最大大小(以字節爲單位)。附加字母kK表示千字節,mM指示兆字節,gG指示千兆字節。

堆的年輕代區域用於新對象。GC在該區域比在其餘區域更頻繁地進行。若是年輕一代的規模過小,那麼將會進行大量的小型垃圾收集。若是大小太大,則只執行完整的垃圾收集,這可能須要很長時間才能完成。Oracle建議您將年輕代的大小保持在整個堆大小的一半到四分之一之間。

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

-Xmn256m  -Xmn262144k  -Xmn268435456

取而代之的是的-Xmn,爲年輕一代都設置堆的初始和最大大小選項,您可使用-XX:NewSize設置初始大小和-XX:MaxNewSize設置的最大尺寸。

-Xms  大小

設置堆的初始大小(以字節爲單位)。該值必須是1024的倍數且大於1 MB。附加字母kK表示千字節,mM指示兆字節,gG指示千兆字節。

如下示例顯示如何使用各類單位將分配的內存大小設置爲6 MB:

-Xms6291456  -Xms6144k  -Xms6m

若是未設置此選項,則初始大小將設置爲爲舊代和年輕代分配的大小的總和。可使用-Xmn選項或-XX:NewSize選項設置年輕代的堆的初始大小

-Xmx  尺寸

指定內存分配池的最大大小(以字節爲單位),以字節爲單位。該值必須是1024的倍數且大於2 MB。附加字母kK表示千字節,mM指示兆字節,gG指示千兆字節。根據系統配置在運行時選擇默認值。對於服務器部署,-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使用SIGHUPSIGINTSIGTERM啓動關閉掛鉤的運行。

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

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

設置線程堆棧大小(以字節爲單位)。附加字母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: 模式

設置字節碼驗證器的模式。字節碼驗證可確保正確造成類文件,並知足「Java虛擬機規範」中第4.10節「 class文件驗證列出的約束

不要關閉驗證,由於這會減小Java提供的保護,並可能因爲格式錯誤的類文件而致使問題。

此選項的可能模式參數包括如下內容:

遠程

驗證引導類加載器未加載的全部字節碼。若是未指定該-Xverify選項,則這是默認行爲

全部

啓用全部字節碼的驗證。

沒有

禁用全部字節碼的驗證。使用-Xverify:none不受支持。

高級運行時選項

這些選項控制Java HotSpot VM的運行時行爲。

-XX:+ CheckEndorsedAndExtDirs

java若是命令使用了endorsed-standards override機制或擴展機制,則啓用該選項以阻止命令運行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:錯誤文件= / hs_err_pid%p.log 

如下示例顯示如何將錯誤日誌設置爲/var/log/java/java_error.log

-XX:錯誤文件= /無功/日誌/ 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 = {真|假}

指定錄製是連續背景錄製仍是在有限時間內運行。默認狀況下,此參數設置爲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

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

日誌等級= {安靜|錯誤|警告|信息|調試|跟蹤}

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

maxage =  時間

指定要爲默認錄製保留的磁盤數據的最長期限。附加s以指定以秒m單位的時間,分鐘,h小時或d天數(例如,指定30s表示30秒)。默認狀況下,最大年齡設置爲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 = {真|假}

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

settings =  path

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

stackdepth =  深度

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本機內存使用狀況的模式。此選項的可能模式參數包括如下內容:

不跟蹤JVM本機內存使用狀況。若是未指定該-XX:NativeMemoryTracking選項,則這是默認行爲

摘要

僅跟蹤JVM子系統的內存使用狀況,例如Java堆,類,代碼和線程。

詳情

除了跟蹤JVM子系統的內存使用狀況外,還能夠跟蹤CallSite各個虛擬內存區域及其已提交區域的內存使用狀況

-XX:ObjectAlignmentInBytes =  alignment

設置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 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.Objecthello.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

指定要爲默認記錄保留的磁盤數據的最大大小(以字節爲單位)。追加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

容許使用商業功能。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

使得可以使用替代信號,而不是SIGUSR1SIGUSR2用於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線程都有本身的分配點。

負值表示基於平臺選擇預取距離。正值是預取的字節數。附加字母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 =  threads

設置用於編譯的編譯器線程數。默認狀況下,服務器JVM的線程數設置爲2,客戶端JVM的線程數設置爲1,若是使用分層編譯,則會擴展爲核心數。如下示例顯示如何將線程數設置爲2:

-XX:CICompilerCount = 2 
-XX:CodeCacheMinimumFreeSpace =  size

設置編譯所需的最小可用空間(以字節爲單位)。附加字母kK表示千字節,mM指示兆字節,gG指示千兆字節。當剩餘小於最小可用空間時,編譯中止。默認狀況下,此選項設置爲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

設置初始代碼高速緩存大小(以字節爲單位)。附加字母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 =  節點

設置單個方法編譯期間要使用的最大節點數。默認狀況下,最大節點數設置爲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標誌,僅支持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引入了新的指示XBEGINXABORTXEND,和XTESTXBEGINXEND說明附上一組指令做爲一個事務中運行。若是在運行事務時未發現衝突,則內存和寄存器修改將在XEND指令處一塊兒提交XABORT指令可用於顯式停止事務以及XEND檢查是否在事務中運行一組指令的指令。

當另外一個線程嘗試訪問同一事務時,對事務的鎖定會膨脹,從而阻止最初未請求訪問該事務的線程。RTM要求在事務停止或失敗時指定後備操做集。RTM鎖是一種委託給TSX系統的鎖。

RTM提升了在關鍵區域中具備低衝突的高競爭鎖的性能(這是不能同時由多個線程訪問的代碼)。RTM還提升了粗粒度鎖定的性能,這在多線程應用程序中一般表現不佳。(粗粒度鎖定是長時間保持鎖定以最小化獲取和釋放鎖定的開銷的策略,而細粒度鎖定是經過僅在必要時鎖定並儘快解鎖來嘗試實現最大並行性的策略。此外,對於不一樣線程使用的輕度爭用鎖,RTM能夠減小錯誤的緩存行共享,也稱爲緩存行乒乓。當來自不一樣處理器的多個線程訪問不一樣的資源時會發生 但資源共享相同的緩存行。結果,處理器重複地使其餘處理器的高速緩存行無效,這迫使它們從主存儲器而不是它們的高速緩存讀取。

-XX:+ UseSHA

爲SPARC硬件啓用SHA加密散列函數的基於硬件的內在函數。UseSHA與結合使用UseSHA1IntrinsicsUseSHA256IntrinsicsUseSHA512Intrinsics選項。

UseSHAUseSHA*Intrinsics標誌默認狀況下啓用,而且僅適用於SPARC T4和新的Java HotSpot的服務器虛擬機的64位支持。

此功能僅在使用sun.security.provider.SunSHA操做提供程序時適用

要禁用全部基於硬件的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_pidpid.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 pid GC.class_histogram命令,其中pid是當前Java進程標識符。

-XX:+ PrintConcurrentLocks

java.util.concurrentControl+C事件(SIGTERM以後啓用鎖的打印默認狀況下,禁用此選項。

設置此選項等同於運行jstack -l命令或jcmd pid Thread.print -l命令,其中pid是當前Java進程標識符。

-XX:+ UnlockDiagnosticVMOptions

解鎖用於診斷JVM的選項。默認狀況下,此選項已禁用,診斷選項不可用。

高級垃圾收集選項

這些選項控制Java HotSpot VM如何執行垃圾收集(GC)。

-XX:+ AggressiveHeap

啓用Java堆優化。根據計算機的配置(RAM和CPU),這會將各類參數設置爲具備密集內存分配的長時間運行做業的最佳選擇。默認狀況下,禁用該選項而且不優化堆。

-XX:+ AlwaysPreTouch

在JVM初始化期間容許觸摸Java堆上的每一個頁面。這會在進入main()方法以前將全部頁面放入內存中該選項可用於測試以模擬長時間運行的系統,其中全部虛擬內存都映射到物理內存。默認狀況下,禁用此選項,並將全部頁面做爲JVM堆空間填充提交。

-XX:+ CMSClassUnloadingEnabled

使用併發標記清除(CMS)垃圾收集器時啓用類卸載。默認狀況下啓用此選項。要禁用CMS垃圾收集器的類卸載,請指定-XX:-CMSClassUnloadingEnabled

-XX:CMSExpAvgFactor =  百分比

設置在計算併發收集統計信息的指數平均值時用於加權當前樣本的時間百分比(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:MinHeapFreeRatioCMS收集週期開始以前分配的值所指定的值的百分比(0到100)默認值設置爲80%。

如下示例顯示如何將佔用率設置爲75%:

-XX:CMSTriggerRatio = 75 
-XX:ConcGCThreads =  threads

設置用於併發GC的線程數。默認值取決於JVM可用的CPU數。

例如,要將併發GC的線程數設置爲2,請指定如下選項:

-XX:ConcGCThreads = 2 
-XX:+ DisableExplicitGC

啓用禁用處理呼叫的選項System.gc()默認狀況下禁用此選項,這意味着System.gc()將處理調用若是System.gc()禁用了對調用的處理,則JVM在必要時仍會執行GC。

-XX:+ ExplicitGCInvokesConcurrent

容許使用System.gc()請求調用併發GC 默認狀況下禁用此選項,而且只能與該-XX:+UseConcMarkSweepGC選項一塊兒啓用

-XX:+ ExplicitGCInvokesConcurrentAndUnloadsClasses

經過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 =  百分比

設置保留爲false上限的堆的百分比(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:+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。附加字母kK表示千字節,mM指示兆字節,gG指示千兆字節。根據系統配置在運行時選擇默認值。對於服務器部署,-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

設置年輕代(託兒所)的堆的初始大小(以字節爲單位)。附加字母kK表示千字節,mM指示兆字節,gG指示千兆字節。

堆的年輕代區域用於新對象。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)的初始大小(以字節爲單位)。附加字母kK表示千字節,mM指示兆字節,gG指示千兆字節。若是此選項設置爲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中刪除,無需替換。

相關文章
相關標籤/搜索