首页 > 试题广场 >

请你讲下CMS垃圾回收器

CMS垃圾收集器采用标记清除算法,使用多线程实现,所以它的应用场景一般为服务端系统的老年代。它是一个以达到在垃圾回收期间用户线程低停顿为目标的垃圾收集器。CMS垃圾收集器垃圾回收分为四个阶段:1,初始标记:只对与GCRoots有直接关键的对象进行可达性分析的标记。2,并发标记:标记整个GCRoots引用链中的对象,与用户线程并发执行。3,重新标记:用于更新在并发标记过程中被复活的对象。4,并发清除:清除标记阶段判断的已死亡的对象。该流程与用户线程并发执行。缺点:1,它使用标记清除算***导致内存碎片化,2,会产生在并发清除阶段的浮动垃圾,只有到下一次垃圾回收时才会被清除。
发表于 2022-05-18 17:21:55 回复(0)
又叫并发低停顿收集器。并发标记阶段,遍历整个对象图,可与垃圾线程一起并发运行。初始标记速度快,并发标记不需要停顿用户线程,并发清除停顿时间比初长比并标短
编辑于 2022-06-17 14:51:17 回复(0)
CMS(Concurrent Mark Sweep)收集器是⼀种以获取最短回收停顿时间为⽬标的收集器。它⽽⾮常符合在注重⽤户体验的应⽤上使⽤。 CMS(Concurrent Mark Sweep)收集器是HotSpot虚拟机第⼀款真正意义上的并发收集器,它第⼀次实现了让垃圾收集线程与⽤户线程(基本上)同时⼯作。 整个过程分为四个步骤: - **初始标记**: 暂停所有的其他线程,并记录下直接与root相连的对象,速度很快 ; - **并发标记**: 同时开启GC和⽤户线程,⽤⼀个闭包结构去记录可达对象。但在这个阶段结束,这 个闭包结构并不能保证包含当前所有的可达对象。因为⽤户线程可能会不断的更新引⽤域,所以 GC线程⽆法保证可达性分析的实时性。所以这个算法⾥会跟踪记录这些发⽣引⽤更新的地⽅。 - **重新标记**: 重新标记阶段就是为了修正并发标记期间因为⽤户程序继续运⾏⽽导致标记产⽣变 动的那⼀部分对象的标记记录,这个阶段的停顿时间⼀般会⽐初始标记阶段的时间稍⻓,远远⽐ 并发标记阶段时间短 - **并发清除**: 开启⽤户线程,同时GC线程开始对为标记的区域做清扫。
发表于 2022-06-25 21:00:06 回复(0)
CMS是老年代的垃圾回收器,它是属于并发垃圾回收,注重的是用户线程低停顿暂停时间(STW),使用的垃圾回收算法是标记清除(三色标记法分为白灰黑 解决循环引用和STW时间过长) 四个阶段: 1. 初始标记: 标记GCRoots关联的直接对象 速度快 有STW 标记为灰色 2. 并发标记: 并发的标记上轮直接对象关联的引用对象进行标记 并将已经遍历过的对象标记为黑色 不需要STW 3. 重新标记: 重新标记的主要作用是标记在并发标记阶段中被修改的对象以及未被遍历到的对象 垃圾回收器会从灰色对象重新开始遍历对象图,将被引用的对象标记为灰色,并将已经遍历过的对象标记为黑色。STW 4. 并发清除: 删除未标记的对象 缺点: 1. 产生内存碎片 2.虽不会停顿用户线程,但会占用一部分线程,降低吞吐量
编辑于 2024-04-02 18:00:25 回复(0)
CMS垃圾收集器采用标记清除算法,使用多线程实现 应用场景:一般为服务端系统的老年代 是一个以达到垃圾回收期间用户线程低停顿为目标的垃圾收集器 四个阶段: 1、初始阶段:标记被GCRoot关联的对象 速度快 Stop the World 2、并发阶段:以GCRoot关联的对象开始遍历整个对象图 时间较长 不停顿用户线程 3、重新标记:在并发期间,为了修正一些因为用户线程运行而发生变动的一些对象 Stop the World 4、并发清除:删除那些在标记阶段已经死亡的一些对象 缺点: 1、内存碎片多 2、虽不会停顿用户线程,但会占用一部分线程,降低吞吐量
发表于 2024-03-16 15:14:53 回复(0)
编辑于 2024-03-08 13:41:55 回复(0)
CSM垃圾回收器采用标记清楚算法 用于老年代的垃圾回收 它是一个以达到垃圾回收器间用户线程低停顿为目标的垃圾回收器 分为四个阶段 初始标记 并发标记 重新标记 并发清除
发表于 2024-03-05 20:16:48 回复(0)
CMS回收器主要针对老年代的回收。采用的是标记-清除算法。 其中分为四个阶段: ● 初始标记:单线程操作,会造成Stop the World,标记GCRoot直达的对象 ● 并发标记:多线程操作,遍历所有GCRoot直达的对象图 ● 重新标记:多线程操作,会造成Stop the World,标记并发标记发现的对象 ● 垃圾回收:多线程操作,将垃圾对象回收 缺点: 1. 标记清除会导致内存碎片过多 2. 并发标记依赖CPU性能,可能会抢占资源,导致用户线程下降 3. 并发清除时,存在浮动垃圾,过多,会很快再次触发垃圾回收。
发表于 2023-11-02 11:21:39 回复(0)
48.
发表于 2023-03-07 10:24:39 回复(0)
CMS(并发低停顿收集器)垃圾收集器采用标记清除算法,使用多线程实现,所以它的应用场景一般为服务端系统的老年代。它是一个以达到在垃圾回收期间用户线程低停顿为目标的垃圾收集器。

CMS垃圾收集器垃圾回收分为四个阶段:
1,初始标记:只对与GCRoots有直接关键的对象进行可达性分析的标记。
2,并发标记:标记整个GCRoots引用链中的对象,与用户线程并发执行。
3,重新标记:用于更新在并发标记过程中被复活的对象。
4,并发清除:清除标记阶段判断的已死亡的对象。该流程与用户线程并发执行。

缺点:1,它使用标记清除算***导致内存碎片化,2,会产生在并发清除阶段的浮动垃圾,只有到下一次垃圾回收时才会被清除。
编辑于 2023-02-27 09:20:24 回复(0)
CMS收集器,收集算法是"标记-清除",通常和ParNew配合使用,ParNew收集新生代,CMS收集老年代. CMS是第一款并发收集器,注重点是在提高用户的体验,也就是减少停顿时间. 工作流程: 1.初始标记,暂停工作线程,连接对象 2.并发标记,工作线程和GC线程同时进行,采用闭包结构进行标记对象,同时记录下在标记过程中,引用有变化的对象 3.修正标记,工作线程暂停,对引用对象有变化的重新修正标记 4.并发收集,将标记的对象或者未标记的对象进行回收清除 优点是:并发收集,停顿时间少,用户体验好 缺点是:收集后会产生大量的空间碎片,无法处理浮动垃圾,且对CPU资源比较敏感
发表于 2023-02-20 16:39:58 回复(0)
1111
发表于 2022-10-30 14:12:00 回复(0)
cms现在已经摒弃了,因为使用的是标记-清楚的垃圾回收算法,产生大量的垃圾碎片
发表于 2022-09-03 15:35:32 回复(0)
CMS收集器是一种以获取最短回收停顿时间为目标的收集器,从名字上就可以看出来CMS收集器是基于标记清除算法实现的,它的运作过程相对于前面集中收集器来说要更复杂一些,整个过程分为四个步骤,包括:初始标记、并发标记、重新标记、并发清除。其中初始标记、重新标记这两个步骤仍然需要“stop the world”。 1)初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快。 2)并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程,这个过程耗时较长但是不需要停顿用户线程,可以与垃圾收集线程一起并发运行。 3)重新标记阶段则是为了修正并发标记期间,因影虎程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间通常会比初始标记阶段稍长一些,但是也远比并发标记阶段的时间短。 4)并发清除阶段,清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段合适可以与用户线程同时并发的。
发表于 2022-07-24 13:30:16 回复(0)