【你问我答】CMS和G1有什么区别?

问题描述:

CMS和G1有什么区别?

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##面试题目##Java#
全部评论
CMS收集器:是一种以获取最短回收停顿时间为目标的收集器。 它的收集过程分为四部分: 初始标记、并发标记、重新标记、并发清除 优点:并发收集、低停顿。 缺点: 1.对CPU资源敏感。并发的时候,它虽然不会导致用户线程停顿,但是会因为占用了一部分CPU资源而导致应用程序变慢,吞吐量降低。 2.无法处理浮动垃圾。并发清除阶段,用户线程还在继续运行而产生的垃圾,这部分垃圾只能等到下一次GC才能进行回收 3.空间碎片,因为CMS收集器是基于标记-清除算法的,如果需要分配大对象的话,找不到足够大的连续内存空间来存放当前对象,很可能需要提前触发一次Full GC。 G1收集器: 运行过程分为四个步骤:初始标记、并发标记、最终标记、筛选回收。 优点: 并行和并发:G1 能充分利用 CPU、多核环境下的硬件优势,使用多个 CPU(CPU 或者 CPU 核心)来缩短 Stop-The-World 停顿时间。部分其他收集器原本需要停顿 Java 线程执行的 GC 动作,G1 收集器仍然可以通过并发的方式让 java 程序继续执行。 分代收集:虽然 G1 可以不需要其他收集器配合就能独立管理整个 GC 堆,但是还是保留了分代的概念。将Java堆划分为多个大小相等的独立区域。 空间整合:从整体来看是基于标记-整理算法实现的收集器,从局部来看是基于复制算法实现的收集器。不会产生内存空间碎片。 可预测的停顿:G1 除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为 M 毫秒的时间片段内。这是因为它可以有计划地避免在整个Java堆中进行全区域的垃圾收集。G1跟踪各个Region里面的垃圾堆积的价值大小,在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region。 区别: 使用范围: CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用 G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用 STW时间: CMS收集器以最小的停顿时间为目标的收集器。 G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间模型) 垃圾碎片: CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片 G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片。 垃圾回收的过程不太一样。
6 回复 分享
发布于 2020-06-17 22:56
CMS:以获取最短回收停顿时间为目标的收集器,基于并发“标记清理”实现 过程: 1、初始标记:独占PUC,仅标记GCroots能直接关联的对象 2、并发标记:可以和用户线程并行执行,标记所有可达对象 3、重新标记:独占CPU(STW),对并发标记阶段用户线程运行产生的垃圾对象进行标记修正 4、并发清理:可以和用户线程并行执行,清理垃圾 优点:并发,低停顿 缺点: 1、对CPU非常敏感:在并发阶段虽然不会导致用户线程停顿,但是会因为占用了一部分线程使应用程序变慢 2、无法处理浮动垃圾:在最后一步并发清理过程中,用户县城执行也会产生垃圾,但是这部分垃圾是在标记之后,所以只有等到下一次gc的时候清理掉,这部分垃圾叫浮动垃圾 3、CMS使用“标记-清理”***产生大量的空间碎片,当碎片过多,将会给大对象空间的分配带来很大的麻烦,往往会出现老年代还有很大的空间但无法找到足够大的连续空间来分配当前对象,不得不提前触发一次FullGC G1:是一款面向服务端应用的垃圾收集器 过程: 1、初始标记 2、并发标记 3、最终标记 4、筛选回收 特点: 1、并行于并发:G1能充分利用CPU、多核环境下的硬件优势,使用多个CPU(CPU或者CPU核心)来缩短stop-The-World停顿时间。部分其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让java程序继续执行 2、分代收集:分代概念在G1中依然得以保留。虽然G1可以不需要其它收集器配合就能独立管理整个GC堆,但它能够采用不同的方式去处理新创建的对象和已经存活了一段时间、熬过多次GC的旧对象以获取更好的收集效果。也就是说G1可以自己管理新生代和老年代了 3、空间整合:由于G1使用了独立区域(Region)概念,G1从整体来看是基于“标记-整理”算法实现收集,从局部(两个Region)上来看是基于“复制”算法实现的,但无论如何,这两种算法都意味着G1运作期间不会产生内存空间碎片 4、可预测的停顿:这是G1相对于CMS的另一大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用这明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒
点赞 回复 分享
发布于 2020-06-17 16:09

相关推荐

一面:(八股盛宴)1.Http1.0 跟2.0有什么区别2.Http 跟Https有什么区别3.osi七层模型?每一层做什么的?4.tcp三次握手,udp4次挥手,为什么握手三次,挥手4次5.常见的错误码,比如200 300 400 什么意思有哪些6.get post请求有什么区别7.java集合介绍一下,知道的都说一下8.说到java你知道些什么?(我说了面向对象跟垃圾回收)9.面向对象说一下10.垃圾回收介绍一下11.常见的垃圾回收器12.cms跟g1的区别13 引用计数法跟可达性分析的区别14.mysql的事务了解吗15 4个性质都说一下(我扯到了三个日志分别实现的4个性质)16.mysql存储引擎了解吗有哪些17.他们有什么区别18 springboot的工作流程19 springboot的常见注解跟原理20 aop的底层实现21 springcloud 用了哪些组件22 feign跟controller调用的区别23 责任链模式的实现(我简历中写了)24 缓存怎么预热的25 mq挂了怎么办(想问分布式事务)26.之前计网还问你了从输入url到最后页面出现的过程27. 项目问了一点28. 类加载过程29 静态变量,静态代码块,啥的一共六个什么东西,类加载的时候执行顺序两道sql三个表之间的连查二面:1.手撕删除数组中连续的数字2.如果有一个课程的库存只有一个 两个用户抢怎么保证不超卖,尽可能说多的解决方法3.从用户浏览商品 ->购买->订单->支付->发货->收货的整个流程怎么设计的 有哪些表,表中关键字段4.整个开发流程你是怎么理解的(我从详细设计到测试说了一遍)#
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务