精华内容
下载资源
问答
  • G1和CMS

    2021-05-08 17:25:29
    答案是:因为CMS作为第一款实现用户线程收集线程并发执行的收集器!当时的设计理念是减少停顿时间,最好是能并发执行!但是问题来了,如要用户线程也在执行,那么就不能轻易的改变堆中对象的内存地址!不然会导致...

    CMS: concurrent Mark Sweep

    以获取最短回收停顿时间为目标的收集器,基于并发“标记清理”实现
    有人会好奇为什么标记清理算法会产生内存碎片!但是CMS仍采用这种算法呢?

    答案是:因为CMS作为第一款实现用户线程和收集线程并发执行的收集器!当时的设计理念是减少停顿时间,最好是能并发执行!但是问题来了,如要用户线程也在执行,那么就不能轻易的改变堆中对象的内存地址!不然会导致用户线程无法定位引用对象,从而无法正常运行!而标记整理算法和复制算法都会移动存活的对象,这就与上面的策略不符!因此CMS采用的是标记清理算法!
    在这里插入图片描述
    原来的垃圾回收算法(整理算法、复制算法)都是整体停止开始标记的,现在cms是gc的标记线程和应用自身线程同时工作,进行标记的;

    过程:

    • 1、初始标记:独占PUC,stop-the-world, 仅标记GCroots能直接关联的对象

    • 2、并发标记:可以和用户线程并发执行,通过GCRoots Tracing 标记所有可达对象。(大量垃圾对象的标记是在并发阶段进行的)

    • 3、重新标记:独占CPU,stop-the-world, 对并发标记阶段用户线程运行产生的垃圾对象进行标记修正,以及更新自我拯救那部分逃逸对象

    • 4、并发清理:可以和用户线程并发执行,清理垃圾

    优点:

    • 并发,低停顿

    缺点:
    1、对CPU非常敏感:在并发阶段虽然不会导致用户线程停顿,但是会因为占用了一部分线程使应用程序变慢

    2、无法处理浮动垃圾:在最后一步并发清理过程中,用户线程执行也会产生垃圾,但是这部分垃圾是在标记之后,所以只有等到下一次gc的时候清理掉,这部分垃圾叫浮动垃圾。由于并发清理的时候,用户线程也在运行,就需要保证用户线程在运行的时候需要留有部分内存以供使用。但是当这部分内存不足以给用户线程正常使用时,就会出现一次 “Concurrent Mode Failure”,一旦出现了“Concurrent Mode Failure”,便会开启后备方案,临时使用SerialOld收集器进行收集工作。

    3、CMS使用“标记-清理”法会产生大量的空间碎片,当碎片过多,将会给大对象空间的分配带来很大的麻烦,往往会出现老年代还有很大的空间但无法找到足够大的连续空间来分配当前对象,不得不提前触发一次FullGC,
    为了解决这个问题CMS提供了一个开关参数,用于在CMS顶不住,要进行FullGC时开启内存碎片的合并整理过程,但是内存整理的过程是无法并发的,空间碎片没有了但是停顿时间变长了

    总的来说;cms为了追求短停顿,并发,未业务正常,无法整理碎片本原因是gc线程、用户线程一起跑),对内存的回收不够彻底;造成垃圾碎片,通过FullGC协助完成; 一起跑的过程还会造成用户线程的内存空间不够,只能全部停顿,用serialOld;

    G1

    G1:是一款面向服务端应用的垃圾收集器
    初始标记–>并发标记---->最终标记---->筛选回收
    G1只有并发标记阶段能做到用户线程和回收线程并发执行

    G1可以不需要其它收集器配合就能独立管理整个GC堆; 因为清理阶段stop the word 可以做内存整理
    目标是替换掉CMS收集器

    在这里插入图片描述

    特点:
    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运作期间不会产生内存空间碎片。

    在最后筛选回收阶段,对每个region里的回收对象价值(回收该区域的时间消耗和能得到的内存比值)最后进行排序,用户可以自定义停顿时间,那么G1就可以对部分的region进行回收! 这使得停顿时间是用户自己可以控制的!!!!

    但是每个region之间是有互相引用的依赖关系的!这导致在MinorGC的时候会同时对老年代进行扫描(甚至是整个堆扫描),那就会导致MinorGC的效率低下,时间变长!

    每个region之间是有互相引用的依赖关系的

    维护一个Remebered Set集合来存放各个Region之间的引用关系!当进行GC Roots Tracing 的时候就可以只扫描set里的关联region!而不用全堆扫描啦!!!

    4、可预测的停顿:这是G1相对于CMS的另一大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用这明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。

    可预测的停顿什么意思呢?
    G1可以有计划的避免在整个JAV堆中进行垃圾收集,可以对每个region里的回收对象价值(回收该区域的时间消耗和能得到的内存比值)进行分析,在最后筛选回收阶段,对每个region里的回收对象价值(回收该区域的时间消耗和能得到的内存比值)最后进行排序,用户可以自定义停顿时间,那么G1就可以对部分的region进行回收!这使得停顿时间是用户自己可以控制的!!!!

    与其它收集器相比,G1变化较大的是它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留了新生代和来年代的概念,但新生代和老年代不再是物理隔离的了它们都是一部分Region(不需要连续)的集合。同时,为了避免全堆扫描,G1使用了Remembered Set来管理相关的对象引用信息。当进行内存回收时,在GC根节点的枚举范围中加入Remembered Set即可保证不对全堆扫描也不会有遗漏了。

    最后筛选回收阶段首先对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间来制定回收计划(可预测的停顿),这一过程同样是需要停顿线程的,但Sun公司透露这个阶段其实也可以做到并发,但考虑到停顿线程将大幅度提高收集效率,所以选择停顿

    展开全文
  • G1和CMS区别

    2020-01-07 21:48:45
    G1和CMS区别 参考java虚拟机P84页 CMS 回收器执行步骤 1、初始标记:GC roots 可以理解为对象指向的标记 2、并发标记: GC roots Tracing 可以理解为 通过初始标记找到了要删除的对象 也就是堆中的指向对象 3、...

                                                 G1和CMS区别

    参考java虚拟机P84页

    CMS 回收器执行步骤

    1、初始标记:GC roots  可以理解为对象指向的标记

    2、并发标记: GC roots Tracing  可以理解为 通过初始标记找到了要删除的对象  也就是堆中的指向对象

    3、重新标记: 可以理解为重新执行了一遍 初始标记 和 并行标记  产生标记记录

    4、删除标记:标记删除发进行并发删除

    优点:并行执行,低停顿

    缺点

    1、不停顿耗线程,耗内存,整体效率低

    2、标记清除法会产生垃圾碎片 容易FGC

    3、会产生浮动垃圾容易FGC

    G1回收器:

    1、初始标识:GC roots  可以理解为对象指向的标记  并且更改tame值出发并发标记

    2、并发标记:GC roots Tracing  可以理解为 通过初始标记找到了要删除的对象  也就是堆中的指向对象

    3、最终标记: 可以理解为重新执行了一遍 初始标记 和 并行标记  产生标记记录 将标记记录存到remember set log中,然后在合并到 remember set中,通过remember set 来管理对象的引用

    4、筛选回收:通过Region区块对回收价值和成本进行排序,根据用户所希望的GC时间进行回收。

    优点:

    1、空间整合:g1使用Region独立区域概念,g1利用的是标记复制法,不会产生垃圾碎片

    2、分代收集:g1可以自己管理新生代和老年代

    3、并行于并发:g1可以通过机器的多核来并发处理 stop - The - world停顿,减少停顿时间,并且可不停顿java线程执行GC动作,可通过并发方式让GC和java程序同时执行。

    4、可预测停顿:g1除了追求停顿时间,还建立了可预测停顿时间模型,能让制定的M毫秒时间片段内,消耗在垃圾回收器上的时间不超过N毫秒

     

    最大的区别是出现了Region区块概念,可对回收价值和成本进行排序回收,根据GC期望时间回收,还出现了member set概念,

     

    将回收对象放入其中,避免全堆扫描

     

    讲一下JVM垃圾收集器,G1和CMS区别

     

    堆空间上分配的不同:

     

    1 CMS收集器:将堆空间分成Eden、Servivor、old,并且他们是固定大小,JVM启动的时候设定且不能改变。

     

    2 G1收集器:将堆空间分成多个大小相同的Region区域,逻辑上分Eden/Servivor、old,且大小是可变的,每次会根据GC的信息做出调整。

     

    压缩策略的不同:

     

    CMS:存在minor GC、full GC,且CMS的youngGC依赖并行GC(ParNew)去完成,只有老年代使用CMS GC去完成。

     

    G1:区分三种策略,minor Gc、mixed GC 、 full GC, 而minexGC会回收整个yong区,回收部分old区。

     

    可预测停顿模型:CMS和G1都是最求最低停顿时间,而CMS可以建立可可预测的停顿时间模型,能让使用者明确指定一段长度为M毫秒的时间片段内,消耗在垃圾回收上的时间不超过N毫秒。

    展开全文
  • 垃圾收集器之G1和CMS

    2020-04-29 22:48:30
    并行指垃圾回收器与程序一起执行(只有G1和CMS时串行) 接下来引出俩种常见的垃圾收集器。 1.G1垃圾收集器。 在多CPU和大内存有很好的性能。 只有G1可以一起回收新生代和老年代。 初始标记:G1把整个堆分成若干个小...

    首先要了解串行和并行的概念

    串行和并行: 串行指垃圾回收器与程序交替执行。 并行指垃圾回收器与程序一起执行(只有G1和CMS时串行)

    接下来引出俩种常见的垃圾收集器。

    1.G1垃圾收集器。

    在多CPU和大内存有很好的性能。
    只有G1可以一起回收新生代和老年代。

    初始标记:G1把整个堆分成若干个小部分(新生代和老年代不在隔离),可以单独回收一个小区域。根据每个区域回收空间和回收时间维护一个优先列表,优先回收价值最大的region。
    并发标记:每个 Region 都有一个 Re membered Set,用来记录该 Region 对象的引用对象所在的 Region。通过使用Remembered Set,在做可达性分析的时候就可以避免全堆扫描。

    回收步骤:

    1、初始标记(它标记了从GC Root开始直接可达的对象)需要停止
    2、并发标记(从GC Roots开始对堆中对象进行可达性分析,找出存活对象)可并行
    3、最终标记(标记那些在并发标记阶段发生变化的对象,将被回收)可并行
    4、筛选回收(首先对各个Regin的回收价值和成本进行排序,根据用户所期待的GC停顿时间指定回收计划,回收一部分Region
    优点:无内存碎片,cpu利用率高。
    整体是标记整理,局部是复制。有利于连续连续执行,防止产生因为无连续内存产生gc。

    2.CMS 标记清理算法

    CMS收集器是一种以获取最短回收停顿时间为目标的收集器。

    这是因为CMS收集器工作时,GC工作线程与用户线程可以并发执行,以此来达到降低收集停顿时间的目的。
    CMS收集器仅作用于老年代的收集,是基于标记-清除算法的,它的运作过程分为4个步骤:
    初始标记:记录GCroot到达的对象 STW
    并发标记:进行GCrootTracing过程,耗时最长。
    重新标记:修正这个过程中一些对象引用的更改。STW
    并发清除:不需要停顿。
    优点:并发收集,低停顿。
    缺点:吞吐量低:CPU利用率低。
    标记清理算法产生内存碎片,会导致老年代无连续内存分配,造成full gc
    在这里插入图片描述

    展开全文
  • G1和CMS收集器的区别

    2019-04-07 15:57:00
    CMS 并发标记清除。。 主要步骤是 初始收集-并发标记-重新标记-并发清除-重置 G1 主要步骤: 初始标记-并发标记-重新标记-复制清除 ...G1和CMS都是响应优先,他们的目的都是尽量控制 stop the ...

    CMS  并发标记清除。。 主要步骤是  初始收集-并发标记-重新标记-并发清除-重置

    G1 主要步骤:  初始标记-并发标记-重新标记-复制清除

    CMS的缺点是对CPU的要求比较高。

    G1的缺点是将内存化成了多块,所以对内存段的大小有很大的要求。

    CMS是清除,所以会有很多的内存碎片。

    G1是整理,所以碎片空间较小

    G1和CMS都是响应优先,他们的目的都是尽量控制 stop the world 的时间。

    G1和CMS的Full GC都是单线程 mark sweep compact算法,直到JDK10才优化成并行的。

    转载于:https://www.cnblogs.com/yangqiong1989/p/10665698.html

    展开全文
  • g1和cms区别

    千次阅读 2019-10-28 22:51:26
    cms回收器执行步骤 1、初始标记:GC roots 可以理解为对象指向的标记 2、并发标记: GC roots Tracing 可以理解为 通过初始标记找到了要删除的对象 也就是堆中的指向对象 3、重新标记: 可以理解为重新执行了一遍...
  • JVM G1和CMS

    2018-12-21 00:25:34
    不能衡量,就不能改进,所以是好与是坏,一切都是...G1有着更可控的pause time 更大的throughput,所以g1在java9 便是默认的垃圾收集器,是cms 的替代者。 所谓的pause time,就是指每次停顿的的时间长度,在jv...
  • g1和cms对比

    2020-08-13 14:06:28
    可预测的停顿:这是G1相对于CMS的另一个大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内。 在G1中,还有...
  • JVM之G1和CMS

    万次阅读 2018-05-17 16:55:41
    CMS(Concurrent Mark Sweep) 收集器 CMS 收集器是获取最短回收停顿时间为目标的收集器。适用于 B/S 系统的服务端。从名字上可以看出来是使用的标记清除算法。整个清除过程如下: 初始标记(CMS initial mark) ...
  • G1和CMS的区别

    千次阅读 2019-09-03 00:38:21
    答案是:因为CMS作为第一款实现用户线程收集线程并发执行的收集器!当时的设计理念是减少停顿时间,最好是能并发执行!但是问题来了,如要用户线程也在执行,那么就不能轻易的改变堆中对象的内存地址!不然会导致...
  • 1 CMS收集器CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。这是因为CMS收集器工作时,GC工作线程与用户线程可以并发执行,以此来达到降低收集停顿时间的目的。CMS收集器仅作用于老...
  • JVM: G1和CMS的区别

    万次阅读 多人点赞 2018-12-17 12:24:12
    答案是:因为CMS作为第一款实现用户线程收集线程并发执行的收集器!当时的设计理念是减少停顿时间,最好是能并发执行!但是问题来了,如要用户线程也在执行,那么就不能轻易的改变堆中对象的内存地址!不然会导致...
  • G1和CMS垃圾收集器

    2018-08-13 10:51:00
    1.CMS收集器 ConcurrentMarkSweep CMS收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重视服务的相应速度,希望系统停顿时间最短...
  • CMS收集算法 参考:图解 CMS 垃圾回收机制原理,-阿里面试题 G1收集算法 参考:G1 垃圾收集器入门 首先要知道 Stop the world的含义(网易面试):不管选择哪种GC算法,stop-the-world都是不可避免的。Stop-the-...
  • 2种垃圾回收器g1和cms

    2019-01-26 14:48:57
    学习背景:更改cmsg1 官网推荐配置: https://docs.oracle.com/cd/E40972_01/doc.70/e40973/cnf_jvmgc.htm#autoId2 Tuning Garbage Collection with Oracle JDK When using Oracle's JDK, the goal in tuning ...
  • 在java中,虽然垃圾回收算法只有三种,也就是我们...在前面这几种回收器中,重点说一下CMS和G1回收器。 一、ParNew-CMS(ConcurrentMarkSweep)回收器 与上图说的那样,parNew是一种新生代垃圾回收器,而CMS是一.
  • CSDN软件工程师能力认证是由CSDN制定并推出的...CMS(Concurrent Mark Sweep) 收集器 CMS 收集器是获取最短回收停顿时间为目标的收集器。适用于 B/S 系统的服务端。从名字上可以看出来是使用的标记清除算法。整个清除..
  • put()的时候导致的多线程数据不一致(丢失数据) resize()操作会导致环形链表 jdk1.8已解决环链的问题(声明两对指针,维护两个连链表) ...G1收集器的设计目标是取代CMS收集器,它同CMS相比,在以下方面表现...
  • 最近看了Garbage-First Garbage Collection 和 A Generational Mostly-concurrent Garbage Collector这两篇论文,这里总结下两者的...这个现在是垃圾回收器的标配,G1和CMS也不例外。但是G1同时回收老年代和年轻代...
  • CMS和G1

    2020-09-12 21:52:01
    CMS 1、目标 CMS以获取最短回收停顿时间为目标。 2、采用的算法 CMS采用的算法是:标记-清除。 3、概念 Stop The Word:虚拟机停顿正在执行的任务,即停顿用户线程。 4、CMS收集过程 ①初始标记:Stop The ...
  • CMS和G1详解

    千次阅读 2020-04-16 19:31:55
    1.G1是包括年轻代年老代的GC 2.CMS是年老代GC 3.二者在某些时候都需要FullGC(serial old GC)的辅助 1 CMS收集器 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。这是因为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,111
精华内容 444
关键字:

g1和cms