Java 8相關新特性請參考:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
以下爲Java 7的參數:
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。 |