`
qxf567
  • 浏览: 21317 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CMS和G1

    博客分类:
  • Java
 
阅读更多
 
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.

 

  • 大小: 5.2 KB
  • 大小: 35.5 KB
  • 大小: 39.2 KB
  • 大小: 38.4 KB
  • 大小: 37.9 KB
  • 大小: 37.4 KB
  • 大小: 29.7 KB
  • 大小: 5.5 KB
  • 大小: 8.2 KB
  • 大小: 6.3 KB
  • 大小: 23.6 KB
  • 大小: 6.4 KB
  • 大小: 6.2 KB
  • 大小: 7.7 KB
  • 大小: 5.8 KB
  • 大小: 13 KB
  • 大小: 6.9 KB
  • 大小: 9.5 KB
分享到:
评论

相关推荐

    61-JVM之CMS收集器与G1收集器1

    本篇文章主要探讨的是两种高级垃圾收集器:CMS(Concurrent Mark Sweep)收集器和G1(Garbage-First)收集器。 CMS收集器以最小化应用程序停顿时间为目标,适用于对响应时间要求严格的互联网或B/S系统服务端。它...

    JVM的标记与STW问题1

    CMS(Concurrent Mark Sweep)和G1(Garbage First)是两种使用并发标记来提升性能的垃圾收集器。本文将深入探讨这两个收集器在处理Stop-the-World(STW)事件、标记阶段以及如何解决并发标记过程中的对象引用变更...

    垃圾回收器(csdn)————程序.pdf

    并行收集器如ParNew和Parallel Scavenge利用多核优势提高吞吐量,而并发收集器如CMS和G1则在垃圾收集时允许应用程序继续运行,减少了STW的影响。G1是一款整堆收集器,能够跨新生代和老年代进行垃圾回收,旨在平衡...

    (源码)基于Java虚拟机(JVM)的内存管理与垃圾回收系统.zip

    3. 垃圾回收算法介绍了标记清除、复制、标记整理等垃圾回收算法,并详细分析了CMS和G1垃圾收集器的工作原理。 4. JVM调优提供了JVM调优的实战指南,包括如何选择合适的垃圾收集器、调整堆内存大小、设置GC停顿时间等...

    jvm优化学习资源学习及讲义说明

    理解不同的垃圾收集器,如Serial、ParNew、Parallel Scavenge、CMS、G1等,以及它们的工作策略和适用场景。 3. **内存调优**:学习如何设置合适的堆大小(Xms, Xmx),新生代和老年代的比例(NewRatio),Eden和...

    JVM面试题分享给需要的同学.zip

    5.你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。 6JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存 7.简单说说你了解的类加载器,可以...

    JVM内存管理面试常见问题全解.doc

    JVM 内存管理面试常见问题全解 ...CMS 和 G1 是 Java 的两种垃圾回收器,CMS 是并发标记垃圾回收器,G1 是 region-based垃圾回收器。CMS 和 G1 的区别在于它们的垃圾回收算法和垃圾回收的频率不同。

    HotSpot实战高清版本

    Cache、Perf Data、Crash 分析方法、转储分析方法、 垃圾收集器的设计演进、CMS 和 G1 收集器、栈、JVM 对硬件寄存器的利用、栈顶缓存技术、解释器、字节 码表、转发表、Stubs、Code Cache、Code 生成器、JIT 编译器...

    高吞吐低延迟Java应用的垃圾回收优化.zip

    4. 并发比调整:CMS和G1有-XX:ParallelGCThreads参数,可调整GC线程数,平衡吞吐量和延迟。 5. 避免内存碎片:使用G1或CMS可以减少碎片,提高内存利用率。 6. 使用String池:避免创建大量短生命周期的String对象,...

    Java应用的垃圾回收优化

    Java的Hotspot JVM提供了几种不同的垃圾回收器,如Serial、Parallel、Concurrent Mark Sweep (CMS)和G1。CMS和G1都是并发的垃圾回收器,能够在不暂停应用线程的情况下执行大部分垃圾回收工作,从而降低停顿时间。...

    JVM大厂面试题目集锦、垃圾回收、内存优化、内存结构全方位题目(附答案)

    JVM还提供了如CMS和G1等更复杂的垃圾收集器,CMS适用于响应时间敏感的应用,G1则试图平衡吞吐量和响应时间,两者都采用并发收集。 面试中常见的问题包括GC收集器的对比,如CMS收集器在内存不足时可能导致Full GC,...

    深入JVM内核-原理、诊断与优化ppt.zip

    例如,Serial GC适合单线程环境,Parallel GC提高了并行性,而CMS和G1则更注重低延迟。通过调整GC参数,可以优化垃圾收集的效率和响应时间。 类装载器是JVM的重要组成部分,它负责加载类文件到JVM中。Java的类装载...

    京东面试经历总结(近两年数据)

    面试官询问了线上环境使用的垃圾回收算法,如CMS和G1。CMS的回收过程分为四个阶段:初始标记、并发标记、重新标记和并发清除。针对CMS的remark阶段速度慢的问题,面试者提到了可以通过设置XX:+...

    jdk20-hotspot-virtual-machine-garbage-collection-tuni

    4. **垃圾收集器类型**:HotSpot提供了多种GC策略,如Serial GC、Parallel GC、Parallel Old GC、CMS(Concurrent Mark Sweep)、G1(Garbage-First)和ZGC(Zing Concurrent Low Latency Collector)。每种收集器有...

    阿里巴巴面试经验分享,经历七轮面试,最终定级P6

    * JVM 调优:可达性分析算法、cms 和 G1 区别、GC 调优、CPU 和内存 profiling * Redis:数据结构、跳跃表、qps 能上多少、sentinel 和 cluster 区别、单线程为什么快 二、框架和设计模式 * Spring:循环依赖解决...

    jvm.rar_jvm

    每种收集器有其特点和适用场景,例如,Serial适合小型应用,Parallel适合多核处理器环境,而CMS和G1则提供并发回收,减少应用暂停时间。 内存调优是优化JVM性能的关键环节。这包括调整堆大小、新生代与老年代的比例...

    jvm.zip_jvm_knownobc_tomcat

    了解不同类型的垃圾收集器,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和G1,以及它们的优缺点,可以帮助优化内存使用。例如,对于高并发环境,CMS和G1收集器能提供低暂停时间,而Parallel或Serial收集器更...

    一线大厂腾讯java面试题

    19. 垃圾收集器有Serial、ParNew、Parallel Scavenge、CMS、G1等,CMS和G1都是为了在低延迟和高吞吐之间取得平衡。CMS适用于响应时间优先,G1适用于整体停顿时间限制。 【Spring框架】 20. Spring管理事务主要通过...

    1_JAVA核心知识点整理.pdf

    - 每个垃圾收集器都有自己的特点和适用场景,如Serial收集器适合单线程环境,而CMS和G1收集器则支持多线程。 4. Java IO/NIO - Java IO采用阻塞IO模型,而NIO支持非阻塞IO模型。 - NIO中的多路复用IO模型允许多...

    JVM垃圾回收器工作原理及使用实例介绍Java开发Java

    - CMS和G1等尝试减少此类事件的影响。 5. 参数调优 - 设置新生代、老年代大小(如-Xms, -Xmx)。 - 选择合适的垃圾回收器(如-XX:+UseParallelGC)。 - 调整并发比、存活对象阈值等参数。 6. 实例分析 - 分析...

Global site tag (gtag.js) - Google Analytics