java虛擬機參數(shù)-X 與 -XX的區(qū)別
- Options that begin with -X are non-standard (not guaranteed to be supported on all VM implementations), and are subject to change without notice in subsequent releases of the JDK.
以 -X 開頭的是非標準選項(不能保證被所有的 JVM 實現(xiàn)都支持),如果在后續(xù)版本的 JDK 中有變更恕不另行通知。 - Options that are specified with -XX are not stable and are not recommended for casual use. These options are subject to change without notice.
指定 -XX 的選項是不穩(wěn)定、不建議隨便使用的。這些選項在今后變更恕不另行通知。
參數(shù)匯總
| 參數(shù)名稱 | 含義 | 默認值 | 描述 |
|---|---|---|---|
| -Xms | 初始堆大小 | 物理內(nèi)存的1/64(<1GB) | 默認(MinHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制. |
| -Xmx | 最大堆大小 | 物理內(nèi)存的1/4(<1GB) | 默認(MaxHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存大于70%時,JVM會減少堆直到 -Xms的最小限制 |
| -Xmn | 年輕代大小(1.4or lator) | 注意:此處的大小是(eden+ 2 survivor space).與jmap -heap中顯示的New gen是不同的。整個堆大小=年輕代大小 + 年老代大小 + 持久代大小.增大年輕代后,將會減小年老代大小.此值對系統(tǒng)性能影響較大,Sun官方推薦配置為整個堆的3/8 | |
| -XX:NewSize | 設置年輕代大小(for 1.3/1.4) | -- | |
| -XX:PermSize | 設置持久代(perm gen)初始值 | 物理內(nèi)存的1/64 | -- |
| -XX:MaxPermSize | 設置持久代最大值 | 物理內(nèi)存的1/4 | 大部分情況下默認值是64M |
| -Xss | 每個線程的堆棧大小 | 物理內(nèi)存的1/4 | JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K.更具應用的線程所需內(nèi)存大小進行 調(diào)整.在相同物理內(nèi)存下,減小這個值能生成更多的線程.但是操作系統(tǒng)對一個進程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗值在3000~5000左右。一般小的應用, 如果棧不是很深, 應該是128k夠用的 大的應用建議使用256k。這個選項對性能影響比較大,需要嚴格的測試。(校長)和threadstacksize選項解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣一句話:"”-Xss is translated in a VM flag named ThreadStackSize” 一般設置這個值就可以了。 |
| -XX:NewRatio | 年輕代(包括Eden和兩個Survivor區(qū))與年老代的比值(除去持久代) | -XX:NewRatio=4表示年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5。Xms=Xmx并且設置了Xmn的情況下,該參數(shù)不需要進行設置。 | |
| -XX:SurvivorRatio | Eden區(qū)與Survivor區(qū)的大小比值 | 設置為8,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:8,一個Survivor區(qū)占整個年輕代的1/10 | |
| -XX:+UseFastAccessorMethods | 原始類型的快速優(yōu)化 | -- | |
| -XX:+DisableExplicitGC | 關閉System.gc() | 默認關閉 | 忽略來自System.gc()方法觸發(fā)的垃圾收集器 |
| -XX:MaxTenuringThreshold | 默認15 | 晉升到老年代的對象年齡。每個對象在堅持過一次Minor GC后,年齡就增加1,當超過這個參數(shù)值就進入老年代 | |
| -XX:PretenureSizeThreshold | 對象超過多大是直接在舊生代分配 | 單位字節(jié) 新生代采用Parallel Scavenge GC時無效。另一種直接在舊生代分配的情況是大的數(shù)組對象,且數(shù)組中無外部引用對象. |
收集器相關參數(shù)
| 參數(shù)名稱 | 含義 | 默認值 | 描述 |
|---|---|---|---|
| -XX:+UseParallelGC | -- | Server模式下虛擬機默認開啟,其他模式關閉 | 虛擬機運行在server模式下的默認值,打開后,使用Parallel Scavenge+Serial Old的收集器組合進行內(nèi)存回收 |
| -XX:+UseParNewGC | 設置年輕代為并行收集 | ----------- | 可與CMS收集同時使用。JDK5.0以上,JVM會根據(jù)系統(tǒng)配置自行設置,所以無需再設置此值 |
| -XX:ParallelGCThreads | 并行收集器的線程數(shù) | ----------- | 此值最好配置與處理器數(shù)目相等 同樣適用于CMS |
| -XX:+UseParallelOldGC | 年老代垃圾收集方式為并行收集(Parallel Compacting) | ----------- | 打開此開關后,使用Parallel Scavenge+Parallel Old的收集器組合進行垃圾內(nèi)存回收 |
| -XX:MaxGCPauseMillis | 每次年輕代垃圾回收的最長時間(最大暫停時間) | 如果無法滿足此時間,JVM會自動調(diào)整年輕代大小,以滿足此值. | |
| -XX:+UseAdaptiveSizePolicy | 自動選擇年輕代區(qū)大小和相應的Survivor區(qū)比例 | 設置此選項后,并行收集器會自動選擇年輕代區(qū)大小和相應的Survivor區(qū)比例,以達到目標系統(tǒng)規(guī)定的最低相應時間或者收集頻率等,此值建議使用并行收集器時,一直打開. | |
| -XX:GCTimeRatio | 設置垃圾回收時間占程序運行時間的百分比 | 公式為1/(1+n) |
CMS相關參數(shù)
| 參數(shù)名稱 | 含義 | 默認值 | 描述 |
|---|---|---|---|
| -XX:+UseConcMarkSweepGC | 使用CMS內(nèi)存收集 | 默認關閉 | ------- |
| -XX:+AggressiveHeap | 試圖是使用大量的物理內(nèi)存。長時間大內(nèi)存使用的優(yōu)化,能檢查計算資源(內(nèi)存, 處理器數(shù)量)。至少需要256MB內(nèi)存。大量的CPU/內(nèi)存, (在1.4.1在4CPU的機器上已經(jīng)顯示有提升) | ||
| -XX:CMSFullGCsBeforeCompaction | 多少次后進行內(nèi)存壓縮 | 由于并發(fā)收集器不對內(nèi)存空間進行壓縮,整理,所以運行一段時間以后會產(chǎn)生"碎片",使得運行效率降低.此值設置運行多少次GC以后對內(nèi)存空間進行壓縮,整理. | |
| -XX+UseCMSCompactAtFullCollection | 在FULL GC的時候, 對年老代的壓縮 | -- | CMS是不會移動內(nèi)存的, 因此, 這個非常容易產(chǎn)生碎片, 導致內(nèi)存不夠用, 因此, 內(nèi)存的壓縮這個時候就會被啟用。 增加這個參數(shù)是個好習慣。可能會影響性能,但是可以消除碎片 |
| -XX:+CMSParallelRemarkEnabled | 降低標記停頓 | --- | ------- |
| -XX:+UseCMSInitiatingOccupancyOnly | 使用手動定義初始化定義開始CMS收集 | --- | 禁止hostspot自行觸發(fā)CMS GC |
輔助信息
| 參數(shù)名稱 | 含義 | 默認值 | 描述 |
|---|---|---|---|
| -XX:+PrintGC | -- | -- | 輸出形式:[GC 118250K->113543K(130112K), 0.0094143 secs][Full GC 121376K->10414K(130112K), 0.0650971 secs] |
| -XX:+PrintGCDetails | -- | -- | -- |
| -XX:+PrintGCTimeStamps | -- | -- | -- |
| -XX:+PrintGC:PrintGCTimeStamps | -- | -- | 可與-XX:+PrintGC -XX:+PrintGCDetails混合使用輸出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs] |
| -XX:+PrintGCApplicationStoppedTime | 打印垃圾回收期間程序暫停的時間.可與上面混合使用 | -- | 輸出形式:Total time for which application threads were stopped: 0.0468229 seconds |
| -XX:+PrintGCApplicationConcurrentTime | 打印每次垃圾回收前,程序未中斷的執(zhí)行時間.可與上面混合使用 | -- | 輸出形式:Application time: 0.5291524 seconds |
| -XX:+PrintHeapAtGC | 打印GC前后的詳細堆棧信息 | -- | -- |
| -Xloggc:filename | 把相關日志信息記錄到文件以便分析.與上面幾個配合使用 | -- | -- |
| -XX:+PrintClassHistogram | -- | -- | -- |
| -XX:+PrintTLAB | 查看TLAB空間的使用情況 | -- | -- |
| XX:+PrintTenuringDistribution | 查看每次minor GC后新的存活周期的閾值 | -- | Desired survivor size 1048576 bytes, new threshold 7 (max 15)。new threshold 7即標識新的存活周期的閾值為7 |