1. 如何設置需要使用的垃圾收集器
-XX:+UseSerivalGC
-XX:+UseSerivalOldGc
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
2. 標準參數
-version
-help
-server
-cp
3. -X 參數
-Xint
-Xcomp
-Xmixed
4. -XX 參數
1. boolean類型
-XX:[+-]<name>
-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
2.非boolean類型
-XX<name>=<value>
-XX:MaxGCPauseMillis=500
5. 常見項目中設置JVM參數方式
- 開發工具中設置比如IDEA,
- eclipse 運行jar包的時候:java -XX:+UseG1GC xxx.jar
- web容器比如tomcat,可以在腳本中的進行設置 通過jinfo實時調整某個java進程的參數(參數只有被標記爲manageable的flags可以被實時修改)
6. 常見參數
-Xms1000 ---> -XX:InitialHeapSize=1000
-Xmx1000 ---> -XX:MaxHeapSize=1000
-Xss1000 ---> -XX:ThreadStack=1000
參數 |
含義 |
說明 |
-XX:CICompilerCount=3 |
最大並行編譯數 |
如果設置大於1,雖然編譯速度會提高,但是同樣影響系統穩定性,會增加JVM崩潰 的可能 |
-XX:InitialHeapSize=100M |
初始化堆大小 |
簡寫-Xms100M |
-XX:MaxHeapSize=100M |
最大堆大小 |
簡寫-Xms100M |
-XX:NewSize=20M |
設置年輕代的大小 |
|
-XX:MaxNewSize=50M |
年輕代大大小 |
|
-XX:OldSize=50M |
設置老年代大小 |
|
-XX:MetaspaceSize=50M |
設置方法區大小 |
|
-XX:MaxMetaspaceSize=50M |
方法區大大小 |
|
-XX:+UseParallelGC |
使用UseParallelGC |
新生代,吞吐量優先 |
-XX:+UseParallelOldGC |
使用UseParallelOldGC |
老年代,吞吐量優先 |
-XX:+UseConcMarkSweepGC |
使用CMS |
老年代,停頓時間優先 |
-XX:+UseG1GC |
使用G1GC |
新生代,老年代,停頓時間優先 |
-XX:NewRatio |
新老生代的比值 |
比如-XX:Ratio=4,則表示新生代:老年代=1:4,也就是新生代佔整個堆內存的1/5 |
-XX:SurvivorRatio |
兩個S區和Eden區的比值 |
比如-XX:SurvivorRatio=8,也就是(S0+S1):Eden=2:8,也就是一個S佔整個新生代的 1/10 |
-XX:+HeapDumpOnOutOfMemoryError |
啓動堆內存溢出打印 |
當JVM堆內存發生溢出時,也就是OOM,自動生成dump文件 |
-XX:HeapDumpPath=heap.hprof |
指定堆內存溢出打印目錄 |
表示在當前目錄生成一個heap.hprof文件 |
XX:+PrintGCDetails -XX:+PrintGCTimeStamps XX:+PrintGCDateStamps Xloggc:$CATALINA_HOME/logs/gc.log |
打印出GC日誌 |
可以使用不同的垃圾收集器,對比查看GC情況 |
-Xss128k |
設置每個線程的堆棧大小 |
經驗值是3000-5000佳 |
-XX:MaxTenuringThreshold=6 提升年老代的大臨界值 默認值爲 15 |
|
|
-XX:InitiatingHeapOccupancyPercent |
啓動併發GC週期時堆內存使用佔比 |
G1之類的垃圾收集器用它來觸發併發GC週期,基於整個堆的使用率,而不只是某一代 內存的使用比. 值爲 0 則表示”一直執行GC循環”. 默認值爲 45. |
-XX:G1HeapWastePercent |
允許的浪費堆空間的佔比 |
默認是10%,如果併發標記可回收的空間小於10%,則不會觸發MixedGC。 |
-XX:MaxGCPauseMillis=200ms |
G1大停頓時間 |
暫停時間不能太小,太小的話就會導致出現G1跟不上垃圾產生的速度。終退化成 Full GC。所以對這個參數的調優是一個持續的過程,逐步調整到佳狀態。 |
-XX:ConcGCThreads=n |
併發垃圾收集器使用的線程數量 |
默認值隨JVM運行的平臺不同而不同 |
-XX:G1MixedGCLiveThresholdPercent=65 |
混合垃圾回收週期中要包括的舊區域設置佔用率閾值 |
默認佔用率爲 65% |
-XX:G1MixedGCCountTarget=8 |
設置標記週期完成後,對存活數據上限爲 G1MixedGCLIveThresholdPercent 的舊區域執行混合垃圾 回收的目標次數 |
默認8次混合垃圾回收,混合回收的目標是要控制在此目標次數以內 |
-XX:G1OldCSetRegionThresholdPercent=1 |
描述Mixed GC時,Old Region被加入到CSet中 |
默認情況下,G1只把10%的Old Region加入到CSet中 |