9. CMS垃圾清理的过程
CMS整个过程比之前的收集器要复杂 , 整个过程分为4个主要阶段 , 即初始标记阶段、并发标记阶段、重新标记阶段和并发清除阶段 。 (涉及STW的阶段主要是:初始标记 和 重新标记 stop-the-world)
- 初始标记(Initial-Mark)阶段:在这个阶段中 , 程序中所有的工作线程都将会因为“stop-the-world”机制而出现短暂的暂停 , 这个阶段的主要任务仅仅只是标记出 GC Roots 能直接关联到的对象 。 一旦标记完成之后就会恢复之前被暂停的所有应用线程 。 由于直接关联对象比较小 , 所以这里的速度非常快 。
- 并发标记(Concurrent-Mark)阶段:从 Gc Roots 的直接关联对象开始遍历整个对象图的过程 , 这个过程耗时较长但是不需要停顿用户线程 , 可以与垃圾收集线程一起并发运行 。
- 重新标记(Remark)阶段:由于在并发标记阶段中 , 程序的工作线程会和垃圾收集线程同时运行或者交叉运行 , 因此为了修正并发标记期间 , 因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录 , 这个阶段的停顿时间通常会比初始标记阶段稍长一些 , 但也远比并发标记阶段的时间短 。
- 并发清除(Concurrent-Sweep)阶段:此阶段清理删除掉标记阶段判断的已经死亡的对象 , 释放内存空间 。 由于不需要移动存活对象 , 所以这个阶段也是可以与用户线程同时并发的
- 私信回复“666”可获取更多JVM资料及面试题 。
- -XX:NewRatio=4:设置年轻的和老年代的内存比例为 1:4;
- -XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:2;
- –XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器组合;
- -XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器组合;
- -XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器组合;
- -XX:+PrintGC:开启打印 gc 信息;
- -XX:+PrintGCDetails:打印 gc 详细信息 。
- 36氪首发|烹饪机器人公司「智谷天厨」获数千万元天使轮融资,羲融善道独家投资
- 领军企业|30个!中国科协发布2022年科技领域重大问题难题
- 社交|腾讯视频为IP编写「价值算法」
- |电饭煲哪个牌子好用质量好?2022年电饭煲排行榜前5名
- |2022上半年口碑不错的机型盘点,这几款2K价位中端机更香
- 鸢尾|2022下半年展望,iPhone14Pro领衔,5款重磅新机又将大放异彩
- 荣耀|2022下半年荣耀手机哪款值得入手?不必纠结,口碑已给出答案
- 荣耀x30|荣耀X30跌至千元机价格,2022年到底值不值得入手呢?
- 小屏|2022年坚持用小屏手机的用户,一般是这三类人,被说中了吗?
- iphone11|2022年最不值得买的三款手机,配置虽高但缺点明显,别花冤枉钱了
