注意:Garbage First (G1)收集器是java6之後加入的。
1 行爲參數
選項和默認值 |
值描述 |
-XX:-AllowUserSignalHandlers |
允許用戶在應用中捕捉信號 (只和Solaris和Linux有關) |
-XX:AltStackSize=16384 |
備用信號棧大小 (Kbytes)。(只Solaris,從5.0刪除) |
-XX:-DisableExplicitGC |
禁止調用System.gc(), JVM 依然在必要時執行垃圾回收。 |
當新的類型檢查器失敗時轉移到舊的類型檢查器上(從6.0開始引進) |
|
-XX:+HandlePromotionFailure |
年輕代不擔保完全提升活所有對象。(1.4.2 update 11引進)(5.0和更早版本是false) |
-XX:+MaxFDLimit |
文件描述符設置到最大(只Solaris) |
-XX:PreBlockSpin=10 |
控制多線程自旋鎖優化的自旋次數 (1.4.2引進) |
-XX:-RelaxAccessControlCheck |
在類校驗裏,放鬆訪問控制檢查(6引進) |
-XX:+ScavengeBeforeFullGC |
full GC之前先youngGC (1.4.1引進) |
-XX:+UseAltSigs |
爲了防止與其他發送信號的應用程序衝突,允許使用候補信號替代 SIGUSR1和SIGUSR2。(1.3.1 update 9引進,1.4.1只Solaris) |
-XX:+UseBoundThreads |
用戶級別線程綁定到核心線程(只Solaris) |
-XX:-UseConcMarkSweepGC |
老年代使用CMS收集(1.4.1引進) |
-XX:+UseGCOverheadLimit |
限制GC的運行時間。如果GC耗時過長,就拋OOM。(6引進) |
使用輕量級進程(內核線程LWP-based)替換線程同步。( 1.4.0引進,只Solaris) |
|
-XX:-UseParallelGC Use |
策略爲新生代使用並行清除,年老代使用單線程Mark-Sweep-Compact的垃圾收集器。 (1.4.1引進) |
-XX:-UseParallelOldGC |
策略爲老年代和新生代都使用並行清除的垃圾收集器。開啓這個選項,自動開啓-XX:+UseParallelGC (5.0 update 6引進) |
-XX:-UseSerialGC |
使用串行垃圾收集. (5.0引進) |
-XX:-UseSpinning |
啓用多線程自旋鎖優化 (1.4.2和5.0需要手動啓動) [1.4.2, 多處理器windows平臺:true |
-XX:+UseTLAB |
啓用線程本地緩存區(1.4.0引進,之前叫UseTLE) [1.4.2和更早, x86或者-client: false] |
-XX:+UseSplitVerifier |
使用StackMapTable屬性新類型檢查(5.0引進)[5.0: false] |
-XX:+UseThreadPriorities |
使用本地線程優先 |
-XX:+UseVMInterruptibleIO |
在I/O進入時或之前線程中斷,導致OS_INTRPT。6引進,只Solaris |
2 Garbage First (G1)
選項和默認值 |
描述 |
-XX:+UseG1GC |
使用Garbage First (G1) 收集器 |
-XX:MaxGCPauseMillis=n |
設置最大暫停時間目標。這是軟目標,JVM盡力達到這個目標。 |
-XX:InitiatingHeapOccupancyPercent=45 |
整個堆佔用多少百分比,開始併發GC週期。整個堆,不是一個代。(例如G1)。0表示恆定GC週期。 |
-XX:ConcGCThreads=n |
併發收集器線程數,默認值隨機器變化。 |
設置預留堆數量,作爲false上限,以減少提升失敗的機率。 |
|
-XX:G1HeapRegionSize=n |
使用G1堆被分成相等大小區域。這設置每個區域大小。默認值根據堆大小進行功效學計算出來。最小1M,最大32M。 |
3 性能參數
選項和默認值 |
描述 |
-XX:+AggressiveOpts |
啓用JVM開發團隊最新的調優成果。例如編譯優化,偏向鎖,並行年老代收集等(5.0 update 6.0引進,默認啓動) |
-XX:CompileThreshold=10000 |
通過JIT編譯器,將方法編譯成機器碼的觸發閥值,可以理解爲調用方法的次數,例如調1000次,將方法編譯爲機器碼[-client: 1,500] |
-XX:LargePageSizeInBytes=4m |
設置java堆使用的內存頁最大值(1.4.0 update 1引入) [amd64: 2m.] |
-XX:MaxHeapFreeRatio=70 |
堆最大空閒百分比,大於這個值會自動收縮堆大小 |
-XX:MaxNewSize=size |
新生代最大值(bytes)。從1.4開始用NewRatio 計算[1.3.1 Sparc: 32m; 1.3.1 x86: 2.5m.] |
-XX:MaxPermSize=64m |
永久帶大小 [5.0 和以上版本: 64 bit VMs 增大預設值的30% ; 1.4 amd64: 96m; 1.3.1 -client: 32m.] |
-XX:MinHeapFreeRatio=40 |
堆的最小空閒空間,小於這個值會自動擴展堆大小。 |
-XX:NewRatio=2 |
新/老的比例。 [Sparc -client: 8; x86 -server: 8; x86 -client: 12.]-client: 4 (1.3) 8 (1.3.1+), x86: 12] |
-XX:NewSize=2m |
新生代默認大小(bytes) [5.0和以上版本: 64 bit VMs增加預設值的30%; x86: 1m; x86, 5.0 and older: 640k] |
-XX:ReservedCodeCacheSize=32m |
設置代碼緩存的最大值,編譯時用(bytes) [Solaris 64-bit, amd64, -server x86: 48m; 在1.5.0_06和更早版本,Solaris 64-bit ,amd64: 1024m.] |
-XX:SurvivorRatio=8 |
伊甸園/生還者比例[Solaris amd64: 6; Sparc ,1.3.1: 25; 其他Solaris平臺, 5.0 和更早版本: 32] |
-XX:TargetSurvivorRatio=50 |
清理之後,希望生還者區使用的百分比。 |
-XX:ThreadStackSize=512 |
線程棧大小(Kbytes). (0是默認大小) [Sparc: 512; Solaris x86: 320 (5.0和之前是256); Sparc 64 bit: 1024; Linux amd64: 1024 (5.0和更早是0); 其他0.] |
-XX:+UseBiasedLocking |
啓用偏向鎖。(看java調優白皮書的例子5)(5.0 update 6引入) [5.0: false] |
-XX:+UseFastAccessorMethods |
使用優化版本的基本類型get方法 |
-XX:-UseISM |
啓用solaris系統的ISM |
-XX:+UseLargePages |
啓用大內存分頁( 5.0 update 5引入) 看《Java Support for Large Memory Pages》 |
-XX:+UseMPSS |
啓用solaris的MPSS(多內存頁大小),支持w/4mb,不能與ISM同時使用(1.4.0 update 1引入, Solaris 9和更新版本有關.) [1.4.1和更早版本: false] |
-XX:+UseStringCache |
使用一般緩存分配String |
-XX:AllocatePrefetchLines=1 |
用預取指令分配一個對象,如果最後分配是對象是1,如果是數組數3 |
-XX:AllocatePrefetchStyle=1 |
預取指令的產生代碼風格: 0-沒有預取指令, 1-每一次分配內存就執行預取指令, 2-當執行預取代碼指令時,用TLAB分配水印指針指向門。 |
-XX:+UseCompressedStrings |
用byte[] 代替字符串(從Java6 Update 21開始引入) |
-XX:+OptimizeStringConcat |
可能的話優化字符串連接操作(Java 6 Update 20引入) |
4 調試參數
選項和默認值 |
描述 |
-XX:-CITime |
打印花費在JIT編譯花費的時間Prints time spent in JIT Compiler. (1.4.0引進) |
-XX:ErrorFile=./hs_err_pid<pid>.log |
如果發生錯誤,報錯錯誤數據到這個文件(6引入) |
-XX:-ExtendedDTraceProbes |
驅動性能影響(performance-impacting)動態跟蹤探測器 (Introduced in 6引入。只Solaris) |
-XX:HeapDumpPath=./java_pid<pid>.hprof |
堆轉儲文件的路徑或文件名。可管理 ( 1.4.2 update 12, 5.0 update 7引入) |
-XX:-HeapDumpOnOutOfMemoryError |
當OOM時,轉儲堆文件。可管理 (1.4.2 update 12, 5.0 update 7引入) |
-XX:OnError="<cmd args>;<cmd args>" |
當發生致命錯誤時,執行用戶定義命令(1.4.2 update 9引入) |
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" |
當第一次OOM時執行用戶定義命令 ( 1.4.2 update 12, 6引入) |
-XX:-PrintClassHistogram |
在Windows下, 按ctrl-break或Linux下是執行kill -3(發送SIGQUIT信號)時,打印class柱狀圖。jmap -histo提供相同功能(1.4.2引入) |
-XX:-PrintConcurrentLocks |
按Ctrl-Break 打印java.util.concurrent 鎖, jstack –l提供相同功能(6引入) |
-XX:-PrintCommandLineFlags |
打印命令行標記 (5.0引入) |
-XX:-PrintCompilation |
當一個方法被編譯,答應信息 |
-XX:-PrintGC |
當GC時,打印信息。 |
-XX:-PrintGCDetails |
當GC時打印詳細信息 (1.4.0引入) |
-XX:-PrintGCTimeStamps |
當GC時打印時間戳 (1.4.0引入) |
-XX:-PrintTenuringDistribution |
打印對象存活年齡信息 |
-XX:-TraceClassLoading |
打印類加載 |
-XX:-TraceClassLoadingPreorder |
按照引用順序打印所有類加載。 (1.4.2引入) |
-XX:-TraceClassResolution |
打印常量池Trace constant pool resolutions. (1.4.2引入) |
-XX:-TraceClassUnloading |
打印卸載類 |
-XX:-TraceLoaderConstraints |
打印類加載策略變化 ( 6引入) |
-XX:+PerfSaveDataToFile |
當推出時,保存jvmstat二進制數據。 |
-XX:ParallelGCThreads=n |
給年輕代和老年代平行垃圾收集器,設置垃圾收集線程數默認值隨機器變化 |
-XX:+UseCompressedOops |
開啓壓縮指針,爲了優化java堆小於32G的64-bit性能(對象引用指針,32 bit 換成64-bit指針) |
-XX:+AlwaysPreTouch |
當JVM初始化時預先對Java堆進行預先摸底(Pre-touch),堆的每個頁初始化時滿足需求,而不是應用執行時遞增。 |
-XX:AllocatePrefetchDistance=n |
設置對象分配的預取距離。將要寫的在這個距離被預抓取到緩存的新對象的內存值。在最後分配的對象地址之前每個java線程有它自己的分配點。默認值隨機器變化。 |
-XX:InlineSmallCode=n |
只內聯以前編譯方法,如果它生成的本地代碼大小比這小。默認值隨機器變化。 |
-XX:MaxInlineSize=35 |
內聯方法的最大字節碼大小 |
-XX:FreqInlineSize=n |
一個頻繁執行的內聯方法的字節碼大小。默認值隨機器變化。 |
-XX:LoopUnrollLimit=n |
當中間表示節點數量小於這個值,展開循環體。在服務器編譯之前的限制是這個值的功能,不是真實值。默認值隨機器變化。 |
-XX:InitialTenuringThreshold=7 |
設置初始週期閥值,用於平行年輕收集器的自適應GC調整大小。週期閥值是對象從youngGC生還、提升到老年代的次數。 |
-XX:MaxTenuringThreshold=n |
設置最大週期閥值,用於自適應GC調整大小。當前最大值是15。平行收集器是15,CMS是4。 |
-Xloggc:<filename> |
指定GC日誌文件。日誌由正常的日誌參數控制。 |
-XX:-UseGCLogFileRotation |
開啓GC日誌分割。必須設置-Xloggc。 |
-XX:NumberOfGClogFiles=1 |
當分割日誌時設置文件數量,必須>= 1。分割的日誌使用命名規則<filename>.0, <filename>.1, ..., <filename>.n-1. |
-XX:GCLogFileSize=8K |
日誌大小在這個大小時被分割。必須 >= 8K。 |