1.Parallel Scavenge 和 ParallelOld
-Xmx4g
-Xms4g
-Xmn820m
-Xss256k
-XX:MaxPermSize=256m(1.8中已經棄用)
-XX:MetaspaceSize=256m
-XX:SurvivorRatio=8
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath:d:/a.dump
-XX:+UseParallelOldGC
-XX:MaxGCPauseMillis=200
-XX:ParallelGCThreads=邏輯處理器個數
-XX:+CMSClassUnloadingEnabled
-XX:+DisableExplicitGC
2.cms 和 parnew
-Xmx4g
-Xms4g
-Xmn820m
-Xss256k
-XX:MaxPermSize=256m(1.8中已經棄用)
-XX:MetaspaceSize=256m
-XX:SurvivorRatio=8
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=d:/a.dump
-XX:+UseConcMarkSweepGC
-XX:ParallelGCThreads=邏輯處理器個數
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSCompactAtFullCollection(1.8中已經棄用)
-XX:CMSFullGCsBeforeCompaction=5(1.8中已經棄用)
-XX:+CMSClassUnloadingEnabled
-XX:+DisableExplicitGC
3.g1收集器
-XX:+UseG1GC
-Xmx4g
-Xms4g
-XX:MaxGCPauseMillis=250
-XX:InitiatingHeapOccupancyPercent=45
-XX:+PrintGCDetails
-XX:+PrintAdaptiveSizePolicy
-XX:G1HeapRegionSize=16m
-XX:+ParallelRefProcEnabled
-XX:ParallelGCThreads=邏輯處理器個數
-XX:ConcGCThreads=邏輯處理器個數的四分之一
-XX:G1MixedGCCountTarget=8
-XX:+PrintGCDetails 打印gc的比較信息,並在退出jvm的時候打印堆的詳細信息
-XX:+PrintGCTimeStamps 打印gc發生的時間
-XX:+PrintGCApplicationConcurrentTime 打印每次垃圾回收前,程序未中斷的執行時間。
-XX:+PrintGCApplicationStoppedTime 打印垃圾回收期間程序暫停的時間。
-Xloggc:filename:把gc信息記錄到文件以便分析。
-XX:+TraceClassLoading用來打印類被加載的過程信息
-XX:+TraceClassUnloading 用來打印類被卸載的過程信息
-XX:+PrintFlagsFinal 打印所有的jvm的參數以及對應的值
-XX:+PrintCommandLineFlags 打印用戶設置的jvm參數的值或者隱試傳遞給jvm的參數的值
-Xmx最大堆
-Xms最小堆,一般和最大堆設置一樣
-Xmn設置新生代大小,一般設置爲整個堆的四分之一,Sun官方推薦配置爲整個堆的3/8
-XX:SurvivorRatio 默認爲8,則兩個Survivor區與一個Eden區的比值爲2:8,一個Survivor區佔整個年輕代的1/10
-XX:NewRatio
-XX:NewRatio=4表示年輕代與年老代所佔比值爲1:4,年輕代佔整個堆棧的1/5
Xms=Xmx並且設置了Xmn的情況下,該參數不需要進行設置。
-XX:+HeapDumpOnOutOfMemoryError 發生堆內存溢出時,打印出堆的信息,可以使用MAT工具分析,通常和-XX:HeapDumpPath使用
-XX:HeapDumpPath:d:/a.dump 導出到某個地方
-XX:PermSize 和-XX:MaxPermSize一樣大小設置(1.8中已經棄用)
-XX:MaxPermSize 128m或者256m,看項目的大小(1.8中已經棄用)
-XX:MetaspaceSize,初始空間大小,達到該值就會觸發垃圾收集進行類型卸載,同時GC會對該值進行調整:如果釋放了大量的空間,就適當降低該值;如果釋放了很少的空間,那麼在不超過MaxMetaspaceSize時,適當提高該值。
-XX:MaxMetaspaceSize,最大空間,默認是沒有限制的。
-Xss每個線程的堆棧大小,256k差不多了
-XX:ParallelGCThreads=n
設置 STW 工作線程數的值。將 n 的值設置爲邏輯處理器的數量。n
的值與邏輯處理器的數量相同,最多爲 8。
-XX:CMSInitiatingOccupancyFraction=75使用cms作爲垃圾回收使用75%後開始CMS收集
-XX:+UseCMSCompactAtFullCollection:使用併發收集器時,開啓對年老代的壓縮.(1.8中已經棄用)
-XX:CMSFullGCsBeforeCompaction=0:上面配置開啓的情況下,這裏設置多少次Full GC後,對年老代進行壓縮(1.8中已經棄用)
-XX:+CMSClassUnloadingEnabled允許對類的元數據進行回收
-XX:+DisableExplicitGC 關閉System.gc()
-XX:InitiatingHeapOccupancyPercent=45設置觸發標記週期的 Java 堆佔用率閾值。默認佔用率是整個 Java 堆的 45%。
-XX:+PrintAdaptiveSizePolicy 打印自適應收集的大小。
-XX:G1HeapRegionSize=16m 當使用G1收集器時,設置java堆被分割的大小。這個大小範圍在1M到32M之間。
-XX:+ParallelRefProcEnabled 這個選項可以用HotSpot VM的任何一種垃圾回收器上,他會是用多個的引用處理線程,而不是單個線程。這個選項不會啓用多線程運行方法的finalizer。他會使用很多線程去發現需要排隊通知的finalizable對象。
-XX:G1MixedGCCountTarget=8 設置標記週期完成後,對存活數據上限爲 G1MixedGCLIveThresholdPercent
的舊區域執行混合垃圾回收的目標次數。默認值是 8 次混合垃圾回收。混合回收的目標是要控制在此目標次數以內。Java HotSpot VM build 23 中沒有此設置
-XX:ConcGCThreads=n 設置並行標記的線程數。將n
設置爲並行垃圾回收線程數 (ParallelGCThreads
) 的 1/4 左右。
http://itindex.net/detail/47030-cms-gc-%E9%97%AE%E9%A2%98
http://www.jianshu.com/p/92a5fbb33764
https://www.zhihu.com/question/57722838
http://blog.csdn.net/b_11111/article/details/52725494
http://www.cnblogs.com/zhguang/p/Java-JVM-GC.html
http://www.hollischuang.com/archives/110