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

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

    CMS

    1、目标

    CMS以获取最短回收停顿时间为目标。

    2、采用的算法

    CMS采用的算法是:标记-清除。

    3、概念

    Stop The World:虚拟机停顿正在执行的任务,即停顿用户线程。

    4、CMS收集过程

    ①初始标记:Stop The World。从GC Roots开始,只标记与GC Roots直接关联的对象,速度很快。

    ②并发标记:与用户线程可以并发执行,从GC Roots开始,进行可达性分析,找出存活对象。

    ③重新标记:Stop The World。因为并发标记阶段用户线程继续执行,导致原先的标记可能发生变动,该阶段就是对原先的标记进行修改。

    ④并发清除:垃圾清除线程和用户线程并发执行,清除垃圾。由于用户线程还在运行,所以可能会产生新的垃圾,称为“浮动垃圾”。

    5、CMS缺点

    ①需要更多的CPU资源:为了让应用程序不停顿,CMS线程和应用程序线程并发执行,这样的话就会需要更多的CPU资源。

    ②无法处理浮动垃圾:最后的并发清除阶段是并发执行的,所以必然会产生浮动垃圾。

    ③产生大量的空间碎片:CMS采用标记-清除算法,势必会产生空间碎片。

    G1(Garbage First)

    1、解释

    G1收集器将Java堆划分为多个大小相等的独立区域,即Region,新生代和老年代不是物理隔阂的,而是部分Region的集合。G1跟踪各个Region里面的垃圾堆积的价值大小(即回收获得的空间大小以及回收所需要的时间),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region。

    2、采用的算法

    G1采用的算法是:标记-整理。

    3、G1收集过程

    ①初始标记:Stop The World。从GC Roots开始,只标记与GC Roots直接关联的对象,速度很快。

    ②并发标记:与用户线程可以并发执行,从GC Roots开始,进行可达性分析,找出存活对象。

    ③最终标记:Stop The World。因为并发标记阶段用户线程继续执行,导致原先的标记可能发生变动,该阶段就是对原先的标记进行修改。

    ④筛选回收:Stop The World。将各个Region分区的回收价值和成本进行排序,根据用户所期望的停顿时间指定回收计划。

    4、G1特点

    ①并行与并发。

    ②分代收集:分代概念在G1中仍然保留,采用不同的算法处理不同的对象。

    ③空间整合:G1采用的算法是标记-整理,不会产生空间碎片。

    ④可预测的停顿时间:由于划分了Region,后台也维护了一个优先列表,会在用户期望的时间内,优先回收价值最大的。

    展开全文
  • CMS和G1的区别

    2020-05-14 17:39:09
    CMS和G1的区别

    CMS和G1的区别

    并发的可达性分析

    三色标记:
    在遍历对象图的过程中,把访问都的对象按照"是否访问过"这个条件标记成以下三种颜色:
    
    白色:表示对象尚未被垃圾回收器访问过。显然,在可达性分析刚刚开始的阶段,所有的对象都是白色的,若在分析结束的阶段,仍然是白色的对象,即代表不可达。
    
    黑色:表示对象已经被垃圾回收器访问过,且这个对象的所有引用都已经扫描过。黑色的对象代表已经扫描过,它是安全存活的,如果有其它的对象引用指向了黑色对象,无须重新扫描一遍。黑色对象不可能直接(不经过灰色对象)指向某个白色对象。
    
    灰色:表示对象已经被垃圾回收器访问过,但这个对象至少存在一个引用还没有被扫描过。
    
    并发标记可能存在的问题:
    一种是把原本消亡的对象错误的标记为存活,这不是好事,但是其实是可以容忍的,只不过产生了一点逃过本次回收的浮动垃圾而已,下次清理就可以。
    一种是把原本存活的对象错误的标记为已消亡,这就是非常严重的后果了,一个程序还需要使用的对象被回收了,那程序肯定会因此发生错误。
    
    怎么解决第二种呢?
    产生第二种的条件当且仅当满足以下两个条件时成立:
    条件一:赋值器插入了一条或者多条从黑色对象到白色对象的新引用。
    条件二:赋值器删除了全部从灰色对象到该白色对象的直接或间接引用。
    因此有两种解决方案:
    增量更新和原始快照
    CMS是基于增量更新来做并发标记的,G1则采用的是原始快照的方式。
    
    什么是增量更新呢?
    增量更新要破坏的是第一个条件(赋值器插入了一条或者多条从黑色对象到白色对象的新引用),当黑色对象插入新的指向白色对象的引用关系时,就将这个新插入的引用记录下来,等并发扫描结束之后,再将这些记录过的引用关系中的黑色对象为根,重新扫描一次。
    可以简化的理解为:黑色对象一旦插入了指向白色对象的引用之后,它就变回了灰色对象。
    
    什么是原始快照呢?
    原始快照要破坏的是第二个条件(赋值器删除了全部从灰色对象到该白色对象的直接或间接引用),当灰色对象要删除指向白色对象的引用关系时,就将这个要删除的引用记录下来,在并发扫描结束之后,再将这些记录过的引用关系中的灰色对象为根,重新扫描一次。
    这个可以简化理解为:无论引用关系删除与否,都会按照刚刚开始扫描那一刻的对象图快照开进行搜索。
    
    展开全文
  • 3.CMS和G1的异同

    2020-03-14 20:44:42
  • JVM CMS和G1执行过程

    2020-11-05 21:52:51
    首先我们先了解一下CMS和G1是做什么的? 都是垃圾回收器 相同的地方:都是并发执行(垃圾收集线程与用户线程同步执行) 不同的地方: 关注点:CMS尽可能缩短垃圾收集时用户线程的停顿时间。G1实现可预期及可配置...

    看了很多的博客,感觉他们写的都过于专业,今日就想能不能用通俗易懂的语言将其描述清楚,将这两个收集器解决掉!!!

    首先我们先了解一下CMS和G1是做什么的?

    都是垃圾回收器

    相同的地方:都是并发执行(垃圾收集线程与用户线程同步执行)

    不同的地方:

    关注点:CMS尽可能缩短垃圾收集时用户线程的停顿时间。G1实现可预期及可配置的用户线程停顿时间

    算法:CMS标记-清除算法,G1复制算法,标记-整理算法

    处理对象消失:CMS用的增量更新,G1用的原视快照

     

    那么这两个垃圾回收器是怎么工作呢?

    首先我们要了解这几个概念:可达性、并发标记出现的问题、对象消失、三色标记法

    可达性:是以根对象集合(GCRoots)为起始点,按照从上至下的方式搜索被根对象集合所连接的目标对象是否可达,只有能够被根对象集合直接或者间接连接的对象才是存活对象。

    三色标记法:

    • 白色:表示该对象还没有被垃圾回收器访问。垃圾回收的最初阶段,所有对象都是白色的。
    • 黑色:表示对象以及被垃圾回收器访问了,而且该对象的所有引用都已经被扫描过。标记为黑色的对象,意味着该对象是存活的。
    • 灰色:位于白色与黑色中间态的对象,表示该对象已经被垃圾回收器访问过,但是它的引用还没有被扫描。

    整个标记过程,就是沿着 GC Roots,整个对象结构图以灰色为波峰的波纹从黑向白推进的过程。最初除了 GC Roots 以外,所有对象都是白色;标记阶段不断的产生灰色和黑色对象;最后图中只剩下白色和黑色的对象,黑色就是存活的对象,白色就是可以被回收的对象

     

    为什么会出现并发标记的问题:

    因为是并发标记,此时垃圾回收线程和用户线程都是执行,那么就可能会再此期间会因为增删改对象,引起最终得到的标记结果不准确。

    并发标记出现的问题:

    • 浮动垃圾:将原本应该被清除的对象,误标记为存活对象。后果是垃圾回收不彻底,不过影响不大,可以在下个周期被回收;
    • 对象消失:将原本应该存活的对象,误标记为需要清理的对象。后果很严重,影响程序运行,是不可容忍的。

    如何解决并发标记出现的问题:

    重点就是防止对象消失

    如何防止:有一位很厉害的人提出了这样的结论

    1. 赋值器插入了一条或者多条从黑色对象到白色对象的新引用;
    2. 赋值器删除了全部从灰色对象到该白色对象的直接或间接引用。

    这两个条件必须全部满足,才会出现对象消失的问题。那么我们只需要对上面条件进行破坏,破坏其中的任意一个,都可以防止对象消失问题的产生。这样就产生了两种解决方案:

    • 增量更新:Incremental Update。
    • 原始快照:Snapshot At The Beginning,SATB。

    增量更新破坏的是第一个条件,当黑色对象插入新的指向白色对象的引用时,就将这个新加入的引用记录下来,待并发标记完成后,重新对这种新增的引用记录进行扫描;原始快照破坏的是第二个条件,当灰色对象要删除指向白色对象的引用关系时,也是将这个记录下来,并发标记完成后,对该记录进行重新扫描。

    如果没有增量更新,黑色对象直接指向白色对象并不会扫描,因为黑色是已经扫描过的,不会再进行扫描,如果想要扫描白色对象,需要时灰色对象执行白色对象,这就是为什么需要增量更新,那么最后还会执行一次,从标记有执行白色对象的黑色对象为起点,再扫描一次(此时时STW),这样就解决了对象消失的问题,白色就有机会变为灰色,再变黑色了

    如果没有原视快照,那么灰色对象删除了白色对象的引用,但是黑色对象此时引用着白色对象,但是黑色不会再执行扫描了,那么白色就会被垃圾回收掉,有了原视快照,那么,我们再删除灰色和白色之间的引用时,做一个记录,之后,再扫描一遍,如果白色有被引用,那么就将器变为灰色,进而转为黑色,不会回收。

    (PS:JVM通过实现AOP切面对“引用对象赋值”操作进行监听,也就是实现增量更新和原始快照的底层原理,一增删改就会触发此机制)

     

    最后,写一下CMS和G1的执行过程

    CMS执行过程

    1、初始标记:独占CPU(STW),仅标记GCroots能直接关联的对象,速度比较快;

    2、 并发标记:可以和用户线程并行执行,标记所有可达对象

    3、 重新标记:独占CPU(STW),对并发标记期间用户线程运行产生的垃圾对象进行标记修正(用的是增量更新)---防止对象消失

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

     

    G1执行过程

    1、初始标记:独占CPU(STW),仅标记GCroots能直接关联的对象,速度比较快;

    2、 并发标记:可以和用户线程并行执行,标记所有可达对象

    3、最终标记:独占CPU(STW),对并发标记期间用户线程运行产生的垃圾对象进行标记修正(用的是原始快照)---防止对象消失

    4、筛选回收:需要STW,但是也可以和用户线程并行执行,首先对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间来制定回收计划

     

    展开全文
  • CMS和G1收集器

    2020-08-03 18:09:27
    在开始介绍CMS和G1前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同。有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器。一般来说,新生代收集器的收集...
  • CMS和G1的区别是我最近在面试过程中经常被问到的一个问题,虽然能答出几点出来,但是自己并不太满意,网上关于两者的对比也没有特别完善的文章,于是打算记录下这篇文章 首先我把答案给出来,然后再去分析为什么会...
  • 垃圾回收器之CMS和G1

    2020-08-09 16:20:01
    垃圾回收器之CMS和G1 1. 什么是垃圾 在介绍垃圾回收器之前,我们现需要明白什么是垃圾? 其实很简单,即在堆内存中,没有被引用的对象即是垃圾,当JVM发生GC时就会把这些垃圾给清除,释放堆内存空间。即内存中不再...
  • 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)收集器是一种以获取最短回收停顿时间为目标的收集器。这是因为...
  • JVM垃圾收集器CMS和G1的区别 CMS(Concurrent Mark Sweep)垃圾回收器 CMS垃圾回收原理 CMS(Concurrent Mark Sweep)收集器是一种以获取 最短回收停顿时间 为目标的收集器。采用的是"标记-清除算法",整个过程分为4步:...
  • 弄明白CMS和G1,就靠这一篇了

    千次阅读 2020-04-14 13:38:15
    在开始介绍CMS和G1前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同。有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器。一般来说,新生代收集器的收集...
  • *CMS和G1

    2020-05-22 19:13:04
    CMS CMS(concurrent mark sweep) 是一种以获取最短回收停顿时间为目标的垃圾收集器。这是因为CMS在工作时可以与用户线程并发执行,以此来降低停顿时间。 CMS用于老年代回收,使用标记-清除算法。 为什么不采用...
  • CMS和G1的区别 CMS:以获取最短回收停顿时间为目标的收集器,基于并发“标记清理”实现 过程: 1、初始标记:独占PUC,仅标记GCroots能直接关联的对象 2、并发标记:可以和用户线程并行执行,标记所有可达对象 ...
  • 但通过监控信息发现:在经过一次FullGC之后,服务器物理内存剩余空间并未提升,按照我之前的理解FullGC之后JVM进程会释放的内存一部分还给物理内存,下面通过几个实验来对比验证一下CMS和G1的物理内存归还机制 ...
  • 首先CMS和G1都作为过java的主流垃圾收集器; 首先CMS是一款并发垃圾收集器,它的应用场景主要是一些互联网以及2B的业务场景(响应速度要快); 下面是引用的周志明java虚拟机那本书上的图,CMS大概分为四个步骤:...
  • CMS和G1垃圾收集器

    2020-05-06 16:45:03
    CMS收集器 G1收集器
  • CMS与G1的区别 参考:CMS收集器和G1收集器优缺点 写这篇文章是基于阿里面试官的一个问题:众所周期,G1跟其他的垃圾回收算法差别很大,你了解G1的垃圾回收架构吗?为什么G1可以做到回收时间用户可以设定? G1垃圾...
  • 垃圾收集器(CMS和G1垃圾收集器)根据作用代不同分类七种垃圾收集器新生代收集器老年代收集器整堆收集器JVM(HotSpot)7种垃圾收集器1、Serial收集器(串行收集器)2、ParNew收集器3、Parallel Scavenge收集器4、...
  • 什么是STW以及CMS和G1优缺点?

    万次阅读 2020-09-08 00:24:11
    什么是Stop The World 不管选择哪种GC算法,stop-the-world都是不可避免的。...一种以获取最短回收停顿时间为目标的收集器,CMS收集器是基于“”标记–清除”(Mark-Sweep)算法实现的。 整个过程分为四个步骤
  • 今天2B哥跟各位牛人分享JVM相关的知识点,今天重点介绍CMS和G1收集器,某些小哥哥就问为什么不讲讲其他收集器?按面试经验来说,这两种收集器问的最多,当然优先讲这两种呀,但是,我说但是,如果你关注我还能看到更...
  • CMS回收垃圾的4个阶段CMS的总结优缺点G1回收器特点G1回收垃圾的4个阶段什么情况下应该考虑使用G1G1设置参数CMS回收垃圾的4个阶段初始标记并发标记重新标记并发清理初始标记阶段:会让线程全部停止,也就是 Stop ...
  • 本文将要为您介绍的是关于GC(下):CMS和G1GC的比较,具体实现方法:简称STW —— Stop the World,暂停所有在执行的线程简史2004年Sun实验室第一次发表G1论文JDK6U14中第一次作为实验选项引入JDK7中开始作为替换CMS的...

空空如也

空空如也

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

cms和g1