說GC參數前 先說下Java 中得三個收集器算法
串行收集器
- 最古老,最穩定,效率高。
- 可能會形成較長時間得停頓
- -XX:+UseSerialGC,使用這收集器得時候,新生代、老年代使用串行回收,新生代使用複製算法,老年代使用標記-壓縮算法
並行收集器
ParNew
- -XX:+UseParNewGC:新生代並行,老年代串行
- Serial收集器新生代得並行版本
- 使用複製算法
- 多線程,須要多核支持
- -XX:ParallelGCThreads 限制線程數量
Parallel
相似於ParNew 新生代使用複製算法,老年代使用標記-壓縮算法多線程
他與ParNew相比更加管住吞吐量併發
- -XX:+UseParallelGC : 使用Parallel收集器+老年代串行
- -XX:+UseParallelOldGC : 使用Parallel收集器+並行老年代
關於並行收集器得參數線程
- -XX:MaxGCPauseMills:最大停頓時間,單位毫秒,GC盡力保證回收時間不超過設定值
- -XX:GCTimeRatio :0-100的取值範圍,意思是垃圾收集時間佔總時間的比,默認99,及最大容許1%時間作GC 其實這兩個參數是矛盾的,由於停頓時間和吞吐量不可能同時調優
CMS收集器
Concurrent Mark Sweep 併發標記清除(與用戶線程一塊兒執行),使用標記清除算法。併發階段會下降吞吐量內存
- -XX:+UseConcMarkSweepGC
- -XX:+ UseCMSCompactAtFullCollection: Full GC後,進行一次整理 整理過程是獨佔的,會引發停頓時間變長
- -XX:+CMSFullGCsBeforeCompaction: 設置進行幾回Full GC後,進行一次碎片整理
- -XX:ParallelCMSThreads: 設定CMS的線程數量
GC 參數整理
- -XX:+UseSerialGC:在新生代和老年代使用串行收集器
- -XX:SurvivorRatio:設置eden區大小和survivior區大小的比例
- -XX:NewRatio:新生代和老年代的比
- -XX:+UseParNewGC:在新生代使用並行收集器
- -XX:+UseParallelGC :新生代使用並行回收收集器
- -XX:+UseParallelOldGC:老年代使用並行回收收集器
- -XX:ParallelGCThreads:設置用於垃圾回收的線程數
- -XX:+UseConcMarkSweepGC:新生代使用並行收集器,老年代使用CMS+串行收集器
- -XX:ParallelCMSThreads:設定CMS的線程數量
- -XX:CMSInitiatingOccupancyFraction:設置CMS收集器在老年代空間被使用多少後觸發
- -XX:+UseCMSCompactAtFullCollection:設置CMS收集器在完成垃圾收集後是否要進行一次內存碎片的整理
- -XX:CMSFullGCsBeforeCompaction:設定進行多少次CMS垃圾回收後,進行一次內存壓縮
- -XX:+CMSClassUnloadingEnabled:容許對類元數據進行回收
- -XX:CMSInitiatingPermOccupancyFraction:當永久區佔用率達到這一百分比時,啓動CMS回收
- -XX:UseCMSInitiatingOccupancyOnly:表示只在到達閥值的時候,才進行CMS回收
emmm這個就先這樣吧,知識儲備還不足it