一.關於JVM參數配置,有多種途徑。html
1.在tomcat中直接配置的算法
打開tomcat的安裝目錄, 在bin下修改catalina.bat文件tomcat
添加以下:服務器
set "JAVA_OPTS=-Xmx300m -Xms300m -Xmn100m -XX:SurvivorRatio=8"併發
在這個位置:優化
啓動tomcat便可起做用。spa
2.使用Myecplise,配置JVM參數操作系統
雙擊Tomcat,打開在以下位置,配置:.net
-Xmx300m
-Xms300m
-Xmn100m
-XX:SurvivorRatio=8線程
在以下位置便可。
而後啓動項目,便可起做用。
二.標準配置:
-Xmx300m -Xms300m -Xmn100m -XX:SurvivorRatio=8 -XX:+UseG1GC -XX:MaxTenuringThreshold=14 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=8
-XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+TraceClassLoading -XX:+PrintClassHistogram
進行JVM的優化的這些參數
解釋以下:
-Xmx300m 最大堆大小 -Xms300m 初始堆大小 -Xmn100m 年輕代大小 -XX:SurvivorRatio=8 Eden區與Survivor區的大小比值,設置爲8,則兩個Survivor區與一個Eden區的比值爲2:8,一個Survivor區佔整個年輕代的1/10 -XX:+UseG1GC 使用 G1 (Garbage First) 垃圾收集器 -XX:MaxTenuringThreshold=14 提高年老代的最大臨界值(tenuring threshold). 默認值爲 15[每次GC,增長1歲,到15歲若是還要存活,放入Old區] -XX:ParallelGCThreads=8 設置垃圾收集器在並行階段使用的線程數[通常設置爲本機CPU線程數相等,即本機同時能夠處理的個數,設置過大也沒有用] -XX:ConcGCThreads=8 併發垃圾收集器使用的線程數量
-XX:+DisableExplicitGC 禁止在啓動期間顯式調用System.gc() -XX:+HeapDumpOnOutOfMemoryError OOM時導出堆到文件 -XX:HeapDumpPath=d:/a.dump 導出OOM的路徑 -XX:+PrintGCDetails 打印GC詳細信息 -XX:+PrintGCTimeStamps 打印CG發生的時間戳 -XX:+PrintHeapAtGC 每一次GC前和GC後,都打印堆信息 -XX:+TraceClassLoading 監控類的加載 -XX:+PrintClassHistogram 按下Ctrl+Break後,打印類的信息
三.咱們把GC分紅4種類型
1. SerialGC
參數-XX:+UseSerialGC
就是Young區和old區都使用serial 垃圾回收算法,
2. ParallelGC
參數-XX:+UseParallelGC
Young區:使用Parallel scavenge 回收算法
Old 區:可使用單線程的或者Parallel 垃圾回收算法,由 -XX:+UseParallelOldGC 來控制
3. CMS
參數-XX:+UseConcMarkSweepGC
Young區:可使用普通的或者parallel 垃圾回收算法,由參數 -XX:+UseParNewGC來控制
Old 區:只能使用Concurrent Mark Sweep
4. G1
參數:-XX:+UseG1GC
沒有young/old區
四.一些配置解釋
1.選項/默認值 說明
-XX:+UseG1GC 使用 G1 (Garbage First) 垃圾收集器
-XX:MaxGCPauseMillis=n 設置最大GC停頓時間(GC pause time)指標(target). 這是一個軟性指標(soft goal), JVM 會盡可能去達成這個目標.
-XX:InitiatingHeapOccupancyPercent=n 啓動併發GC週期時的堆內存佔用百分比. G1之類的垃圾收集器用它來觸發併發GC週期,基於整個堆的使用率,而不僅是某一代內存的使用比. 值爲 0 則表示"一直執行GC循環". 默認值爲 45.
-XX:NewRatio=n 新生代與老生代(new/old generation)的大小比例(Ratio). 默認值爲 2.
-XX:SurvivorRatio=n eden/survivor 空間大小的比例(Ratio). 默認值爲 8.
-XX:MaxTenuringThreshold=n 提高年老代的最大臨界值(tenuring threshold). 默認值爲 15.
-XX:ParallelGCThreads=n 設置垃圾收集器在並行階段使用的線程數,默認值隨JVM運行的平臺不一樣而不一樣.
-XX:ConcGCThreads=n 併發垃圾收集器使用的線程數量. 默認值隨JVM運行的平臺不一樣而不一樣.
-XX:G1ReservePercent=n 設置堆內存保留爲假天花板的總量,以下降提高失敗的可能性. 默認值是 10.
-XX:G1HeapRegionSize=n 使用G1時Java堆會被分爲大小統一的的區(region)。此參數能夠指定每一個heap區的大小. 默認值將根據 heap size 算出最優解. 最小值爲 1Mb, 最大值爲 32Mb.
2.JVM堆大小的默認最大和最小值(參考)
操做系統及JVM類型 | 初始堆的大小(Xms) | 最大堆的大小(Xmx) |
Linux/Solaris,32位客戶端 | 16MB | 256MB |
Linux/Solaris,32位服務器 | 64MB | 取1GB和物理內存大小1/4兩者中的最小值 |
Linux/Solaris,64位服務器 | 取512MB和物理內存大小1/64兩者中的最小值 | 取32GB和物理內存大小1/4兩者中的最小值 |
MacOS,64位服務器型JVM | 64MB | 取1GB和物理內存大小1/4兩者中的最小值 |
32位Window系統,客戶端型JVM | 16MB | 256MB |
64位Window系統,客戶端型JVM | 64MB | 1GB和物理內存大小1/4兩者中的最小值 |
3.通常性調優辦法
-Xmx 和-Xms 通常設置爲同樣大小,這樣能稍微提升GC的運行效率,由於他/她再也不須要估算堆是否須要調整大小了
JVM參數配置報錯:
1.Conflicting collector combinations in option list; please refer to the release notes for the combina
報錯:使用多種GC致使GC衝突
參考資料:
http://blog.csdn.net/mr__fang/article/details/47723767
http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html