上节介绍了GC相关概念,算法,和各版本HEAP结构,对GC有了认知。该节开始介绍GC收集器和具体优化。
GC收集器种类 (重点介绍了cms收集器和G1收集器)
1. Serial:串行收集器,稳定高效停顿时长。新老都串行回收 -XX:+UseSerialGC
2. ParNew: 并行收集器,新并行,老串行XX:+UseParNewGC
3. Parallel: 并行收集器+串行老年代 XX:+UseParallelGC
-XX:+UseAdaptiveSizePolicy 打开自适应GC策略, 在这种模式下, 新生代的大小, eden,survivior的比例, 晋升老年代的 对象年龄等参数会被自动调整,以达到堆大小,吞吐量, 停顿时间之间的平衡点
4. Parallel: 并行收集器+并行老年代(throughput) XX:+UseParallelOldGC
-XX:MaxGCPauseMills,代表最大的GC线程占用的停顿时间,单位是毫秒 -XX:GCTimeRatio,吞吐量-垃圾收集时间占 总时间的比,默认99,允许1%时间做GC.
如果GC很频繁 GC的最大停顿时间变短,但吞吐量变小,
如果GC次数很少 最大的停顿时间就会变长,但吞吐量增大
5. CMS:并发收集器(Concurrent Mark Sweep) 针对老年代
老年代使用CMS回收器, 新生代使用ParNew回收器;基于标记清除算法(不压缩且
产生内存碎片,弊端:碎片和浮动垃圾导致另一次FULLGC) XX:+UseConcMarkSweepGC
( CMS--> Card Marking JVM参数是-XX:UseCondCardMark 在高并发的情况下,Card标记为脏的操作本身就存在