seancheer
2018-01-29 11:46:50 +08:00
关于一些参数
-XX:MaxTenuringThreshold=n Sets the maximum tenuring threshold for use in adaptive GC sizing. The current largest value is 15. The default value is 15 for the parallel collector and is 4 for CMS.(需要注意的是,这个参数默认为 15,但是对于 CMS 来讲,默认为 4,该段文字摘自官方文档)
-XX:+UseCMSCompactAtFullCollection:CMS 使用标记-清除法进行垃圾回收,因此不对内存随便进行整理,使用该选项可以指定对内存碎片进行整理,该选项默认是开启的
-XX:+ScavengeBeforeFullGC:指定进行 fullGC 前进行一次 young GC
-XX:CMSInitiatingOccupancyFraction:CMS 被触发时老年代使用的比例
-XX:MaxGCPauseMillis=50:一次 GC 的最大时间,单位为 ms,使用 parallel scanvenge 算法和 G1 的时候才会有效
-XX:PretenureSizeThreshold:超过设定的大小,那么对象将会直接被分配到老年代。单位为 byte,默认为 0,不开启该功能。(对于 PS 的收集算法,该选项无效)
-XX:+HandlerPromotionFailure:在 Minore GC 前,jvm 会预估老年代最大可用的连续空间是否大于新生代所有对象总空间,如果小于,那么如果打开此开关,jvm 会计算老年代最大可用的连续空间是否大于 [历代] 年轻代晋升到老年代所有对象的平均大小,如果小于,那么会进行 Minore GC,否则,进行 full GC ; 如果此开关没有打开,那么会直接进行 full GC,(目前根据 jdk 源码,该选项已经无效,jvm 会直接进行上述的判断)
GC 常见的几个误解:
除了 CMS 和 G1 外,PSYoung Gen,DefNew,PSOldGen,ParOldGen 等收集算法都需要 stw。
STW(stop-the-world)并不等于 full gc,full gc 指发生在年轻代和老年代的 gc。
CMS 是发生在老年代的 GC 算法,但是其中的两个阶段,initial marking 和 final remark 发生在年轻代和老年代,因此其 stw 属于 full gc 的统计数据里。
当 CMS 运行过程中,老年代空间不够,默认会使用 Serial gc 进行一次 full gc。
楼主可以参考着看是不是需要调整。。