JVM学习JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统JVM

GC(6)、CMS收集器以及参数整理

2017-09-08  本文已影响68人  编程界的小学生

一、CMS收集器(Concurrent Mark Sweep)
1、概念
CMS收集器是一种以获取最短回收停顿时间为目标的收集器。是一种基于“标记-清除”算法来实现的。

2、CMS步骤

3、每个步骤解释

4、图示
CMS收集器的内存回收过程是与用户线程一起并发执行的。

Paste_Image.png

5、优点
(1)并发收集
(2)尽可能降低停顿
真的是一个很优秀的垃圾收集器!

6、缺点
(1)开头就说了,是标记-清除算法,所以会产生很多碎片,导致连续大内存空间太少。
(2)清理不彻底。因为在清理阶段,用户线程还在运行,会产生新的垃圾,无法清理,只能等到下一次GC再清理。

二、G1收集器
G1是比较前沿的成果,目前不讲解。知道存在这个东西就行了,未来可能会替代CMS。

三、参数整理

-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回收

若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


qrcode_for_gh_577b64e73701_258.jpg
上一篇 下一篇

猜你喜欢

热点阅读