Concurrent Mark Sweept CMS
启用方式:-XX:+UseConcMarkSweepGC,表示年老代使用此机制收回
基础算法:标记-清除
回收过程:
1、初始标记(STW stop the world),扫描能够和“根对象”直接关系的对象,并作标记。时间快;
2、并发标记3、并发预清理,处理“并发标记”的对象(可能会有一些新的对象晋升到老年代),减少下一阶段(SWT)4、重新标记 扫描剩余对象。从“跟对象”开始向下追溯,并处理对象并联5、并发清理6、并发重置
缺点:
由于采用Mark-Sweep,所以CMS不会整理、压缩堆空间。
需要更多的CPU资源
需要更大的空间,百分之68就开始行动了。
Garbage First (G1) 保留了CMS关于代的概念,但是不是物理上连续区域,而是一个逻辑的概念。在Remark队段新算法的运用,以及收集过程中的整理压缩,弥补了CMS的不足。“G1 is planned as the long term replacement for the Concurrent Mark-Sweep Collector (CMS)”
---------------------官方介绍
1、对于cms收集器的堆结构
将堆分成三个部分:
Eden:“伊佃园” survivors:幸存区 Old Generation:年老代、老年代
上半部分为“年轻代”,下半部分称之为“年老代”或“老年代”。“年轻代”又分为Eden和两块survivors区域;“年老代”是一块连续的区域。对象的收集发生在上面这整个区域。
2、CMS的“年轻代”GC
“年轻”代是鲜绿色的“年老代”是蓝色的。下图就像你的应用程序运行了一会后的效果。“对象”被扫描在“年老代”的区域。
在CMS中,“年老代”对象被释放时,它们不会移动位置。这个区域也不会被压缩,除非在一次full GC中。
3、"年轻代"收集
存活的对象被从Eden复制到survivor再到另一块survivor.一个老对象达到了寿命就会进入“老年代”
4、后“年轻代”
“年轻代”被清除后,Eden和另一块survivor区域被清空。
5、CMS的“年老代”
一共发生两次“停止世界”“初始标记“和”重新标记“,当”年老代“达到一定比例,就会拉开序幕。
(1)初使标记是一个简短的过程(可到达被标记),(2)并发标记是当程序继续程序的时候发生活的对象,(3)再次标记是落标记的对象。
6、”年老代“收集-并发收集
对象没有在先前阶段标识将会被释放,但是不是被压缩。
注意:未标记对象==死对象
7、”年老代“收集-收集之后
被 第4步清扫之后,你可以看到大量的内存空闲了,你会注意这些没有被压缩。
最终,CMS收集器通过5重新开始和等待下次开工。
-------------------------------------------------------------------------------
1、G1堆结构
堆是一块内存区域,这块区域被划分成固定大小的块。
块的大小可以在JVM启动时选择,JVM的块的大小可达到2000,从1M到32M不等 ,由此可推算G1最大内存可管理60多G。
2、G1堆的分配
事实上,这些区域被划分成逻辑上的三块区域:Eden、Survivor、”年老代“区域。
3、G1的”年轻代“
整个堆被划分成2000块,最小的为1M,最大的是32M,蓝色块存放着”年老代“对象,”绿色块存放着“年轻代”对象。
、
注意这些块不一定非的是连续的空间。
4、G1的一个“年轻代”
活着的对象被疏散(复制或移动)到一个或多个survivor块上,如果这些对象达到一定寿命会被送进“年老代”。
这是一个(STW),Eden和survivor的大小会在下一次Young GC时被算出。根据这些信息会保持它的大小。可以根据需要变化大小。
5、G1的“年轻代”结束
活着的对象被从survivor区域移到“年老代”上
最近被变动的显示为深蓝色,survivor区域为绿色
总和来讲,G1的年轻代有如下特点:
堆是单一的内存空间划分的区域
年轻代的内存由一系列非连续的区域组成,这使得它很容易在需要的时候扩展;
年轻代的收集会停止世界,所以的应用程序线程都会停止;
年轻的GC是并行进行的;
存活的对象被复制到survivor或年老代上。
G1 的老年代
6、初始标记
7、并发标记
8、重新标记
9、复制/清除
10、复制、清除 之后
选定的区域已收集和压缩成深蓝色的区域和暗绿色的区域在图中所示
G1年老代的特点:
- Concurrent Marking Phase
- Liveness information is calculated concurrently while the application is running.
- This liveness information identifies which regions will be best to reclaim during an evacuation pause.
- There is no sweeping phase like in CMS.
- Remark Phase
- Uses the Snapshot-at-the-Beginning (SATB) algorithm which is much faster then what was used with CMS.
- Completely empty regions are reclaimed.
- Copying/Cleanup Phase
- Young generation and old generation are reclaimed at the same time.
- Old generation regions are selected based on their liveness.
相关推荐
本篇文章主要探讨的是两种高级垃圾收集器:CMS(Concurrent Mark Sweep)收集器和G1(Garbage-First)收集器。 CMS收集器以最小化应用程序停顿时间为目标,适用于对响应时间要求严格的互联网或B/S系统服务端。它...
CMS(Concurrent Mark Sweep)和G1(Garbage First)是两种使用并发标记来提升性能的垃圾收集器。本文将深入探讨这两个收集器在处理Stop-the-World(STW)事件、标记阶段以及如何解决并发标记过程中的对象引用变更...
并行收集器如ParNew和Parallel Scavenge利用多核优势提高吞吐量,而并发收集器如CMS和G1则在垃圾收集时允许应用程序继续运行,减少了STW的影响。G1是一款整堆收集器,能够跨新生代和老年代进行垃圾回收,旨在平衡...
3. 垃圾回收算法介绍了标记清除、复制、标记整理等垃圾回收算法,并详细分析了CMS和G1垃圾收集器的工作原理。 4. JVM调优提供了JVM调优的实战指南,包括如何选择合适的垃圾收集器、调整堆内存大小、设置GC停顿时间等...
理解不同的垃圾收集器,如Serial、ParNew、Parallel Scavenge、CMS、G1等,以及它们的工作策略和适用场景。 3. **内存调优**:学习如何设置合适的堆大小(Xms, Xmx),新生代和老年代的比例(NewRatio),Eden和...
5.你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。 6JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存 7.简单说说你了解的类加载器,可以...
JVM 内存管理面试常见问题全解 ...CMS 和 G1 是 Java 的两种垃圾回收器,CMS 是并发标记垃圾回收器,G1 是 region-based垃圾回收器。CMS 和 G1 的区别在于它们的垃圾回收算法和垃圾回收的频率不同。
Cache、Perf Data、Crash 分析方法、转储分析方法、 垃圾收集器的设计演进、CMS 和 G1 收集器、栈、JVM 对硬件寄存器的利用、栈顶缓存技术、解释器、字节 码表、转发表、Stubs、Code Cache、Code 生成器、JIT 编译器...
4. 并发比调整:CMS和G1有-XX:ParallelGCThreads参数,可调整GC线程数,平衡吞吐量和延迟。 5. 避免内存碎片:使用G1或CMS可以减少碎片,提高内存利用率。 6. 使用String池:避免创建大量短生命周期的String对象,...
Java的Hotspot JVM提供了几种不同的垃圾回收器,如Serial、Parallel、Concurrent Mark Sweep (CMS)和G1。CMS和G1都是并发的垃圾回收器,能够在不暂停应用线程的情况下执行大部分垃圾回收工作,从而降低停顿时间。...
JVM还提供了如CMS和G1等更复杂的垃圾收集器,CMS适用于响应时间敏感的应用,G1则试图平衡吞吐量和响应时间,两者都采用并发收集。 面试中常见的问题包括GC收集器的对比,如CMS收集器在内存不足时可能导致Full GC,...
例如,Serial GC适合单线程环境,Parallel GC提高了并行性,而CMS和G1则更注重低延迟。通过调整GC参数,可以优化垃圾收集的效率和响应时间。 类装载器是JVM的重要组成部分,它负责加载类文件到JVM中。Java的类装载...
面试官询问了线上环境使用的垃圾回收算法,如CMS和G1。CMS的回收过程分为四个阶段:初始标记、并发标记、重新标记和并发清除。针对CMS的remark阶段速度慢的问题,面试者提到了可以通过设置XX:+...
4. **垃圾收集器类型**:HotSpot提供了多种GC策略,如Serial GC、Parallel GC、Parallel Old GC、CMS(Concurrent Mark Sweep)、G1(Garbage-First)和ZGC(Zing Concurrent Low Latency Collector)。每种收集器有...
* JVM 调优:可达性分析算法、cms 和 G1 区别、GC 调优、CPU 和内存 profiling * Redis:数据结构、跳跃表、qps 能上多少、sentinel 和 cluster 区别、单线程为什么快 二、框架和设计模式 * Spring:循环依赖解决...
每种收集器有其特点和适用场景,例如,Serial适合小型应用,Parallel适合多核处理器环境,而CMS和G1则提供并发回收,减少应用暂停时间。 内存调优是优化JVM性能的关键环节。这包括调整堆大小、新生代与老年代的比例...
了解不同类型的垃圾收集器,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和G1,以及它们的优缺点,可以帮助优化内存使用。例如,对于高并发环境,CMS和G1收集器能提供低暂停时间,而Parallel或Serial收集器更...
19. 垃圾收集器有Serial、ParNew、Parallel Scavenge、CMS、G1等,CMS和G1都是为了在低延迟和高吞吐之间取得平衡。CMS适用于响应时间优先,G1适用于整体停顿时间限制。 【Spring框架】 20. Spring管理事务主要通过...
- 每个垃圾收集器都有自己的特点和适用场景,如Serial收集器适合单线程环境,而CMS和G1收集器则支持多线程。 4. Java IO/NIO - Java IO采用阻塞IO模型,而NIO支持非阻塞IO模型。 - NIO中的多路复用IO模型允许多...
- CMS和G1等尝试减少此类事件的影响。 5. 参数调优 - 设置新生代、老年代大小(如-Xms, -Xmx)。 - 选择合适的垃圾回收器(如-XX:+UseParallelGC)。 - 调整并发比、存活对象阈值等参数。 6. 实例分析 - 分析...