深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。

这篇具有很好参考价值的文章主要介绍了深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java CMS,G1垃圾收集器工作流程原理浅析

JVM内存空间基础知识点(基于JDk1.8)
1.方法区:逻辑概念,元空间,方法区主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫“非堆”。
2.程序计数器:程序计数器可以看作当前线程所执行的字节码的行号指示器。如果线程执行的是Java方法那么这个计数器记录的是正在执行的虚拟机字节码指令地址。如果执行的是Native方法,这个计数器为空。
2.Java虚拟机栈:Java虚拟机栈跟程序计数器一样是线程私有的,它的生命周期和线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用到执行完成的过程,就对应一个栈帧在虚拟机栈中入栈到出栈的过程。
3.本地方法栈:本地方法栈与虚拟机栈作用相似,它们之间的区别是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务。
4.Java堆: Java堆通常是Java虚拟机所管理的内存中最大的一块。Java堆是被锁有线程共享的一块内存区域,在虚拟机启动时创建。这块区域唯一的目的就是存放对象实例,几乎所有对象实例都在该区域分配内存。

Java堆时垃圾收集器管理的主要区域(GC堆),从内存回收的角度(收集器一般采用分代收集算法),Java堆还可以细分为:新生代和老年代。新生代再细分有:Eden空间、From Survivor空间、To Survivor空间。

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm

1)简述垃圾收集算法

1.标记-清除算法:

两遍扫描,第一遍扫描枚举GCRoots根节点对象标记出不可回收对象,第二遍扫描找到可回收对象进行清理。算法简单,存活对象较多的情况下效率比较高,但是容易产生一个内存碎片化的问题。

2.复制算法:

一次扫描找到存活对象进行复制,效率较高。适用于存活对象较少的情况,新生代垃圾收集(新生代对象存活率百分之二)。但是对内存要求较高,一半的内存空间预留。

3.标记-整理算法:

两遍扫描找到存活对象并进行移动整理。内存不会造成浪费,但是回收效率较低。

4.分代收集算法:前几种算法的组合

2)垃圾收集器介绍

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm

1.serial系列(标记整理算法)

serial-serialold组合,单线程垃圾收集器,GC线程工作的时候会暂停所有用户线程,产生stop the world。适用于内存较小的内存垃圾回收,简单而高效,不存在多线程交互开销,效率高。一般是硬件能力不足的情况下推动产生的。
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm

2.Parallel系列(标记整理算法)

Parallel 并行线程垃圾收集器,GC线程工作的时候暂停用户线程,产生stop the world。内存较大时,单线程GC工作时造成的stop the world时间过长,影响用户体验。Parallel系列垃圾收集器GC线程并行清理,减少gc工作线程时间。
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm

3.CMS垃圾收集器。重点(垃圾清除算法)

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm
CMS垃圾收集器工作流程
1.初始标记:枚举GCRoots对象,暂停用户线程,扫描对象较少,Stop the world时间短。
2.并发标记:GC线程,用户线程并发工作,耗时时间最久的一部分内容(80%GC时间),GC线程抢占CPU,对用户线程有影响。由于用户线程是并发执行的,用户线程会造成一些对象的引用改变,产生新的垃圾对象。
3.重新标记:短暂的stop the world,不会有对象的状态改变。并发标记产生的新的垃圾会在这阶段被标记出来。
4.并发清理: GC线程和用户线程并发执行,产生的浮动垃圾由下一次垃圾回收清理。
缺点:CMS进行垃圾收集的时候需要预留一定的内存空间给用户线程工作(默认68%,可设置),在内容空间不足时,会导致回收失败,此时会通过serialold进行垃圾回收,速度特别慢。

CMS垃圾收集器采用的是三色标记算法。
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm
由于CMS采用的是并发标记,在GC线程工作时,此时有一个黑色的对象的引用对象被置为null,由于黑色对象不需要再被重新扫描,此时又没有其他引用跟置为null的引用对象产生关联时。就会产生一个浮动垃圾的情况。
在一个灰色对象的引用白色对象引用被置为null,并将黑色对象的属性引用指向该白色对象时,会产生一个漏标现象。CMS采用三色标记法+incremental update算法,在黑色对象引用增加时,将黑色引用对象置为灰色,下次重新扫描。

4.G1垃圾收集器。重点,(region内标记清楚算法,region之间复制算法)

G1逻辑分代概念。基于整个内存划分为四个不同类型的内存区域。
H:存放大对象

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm
每个region都有一个RememberrdSet内存区域 记录了其他region到benregion的引用,垃圾收集器只需扫描该区域即可。
G1分为YGC(新生代回收),FGC(整个堆内存回收),MixedGC(可设置MixedGC启动的内存大小)
MixedGC类似于CMS,在堆内存空间使用超过45%时,产生MixedGC。G1采用三色标记法+SATB算法,在灰色对象的白色引用对象引用清楚时,置入堆栈对象引用,后续扫描RSet枚举根对象判断是有有新的引用指向该白色对象。没有则进行清楚。

CMS垃圾清理流程图 及 具体逻辑

深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm

1、新创建的对象一般会被分配在新生代中。常用的新生代的垃圾回收器是 ParNew 垃圾回收器,它按照 8:1:1 将新生代分成 Eden 区,以及两个 survivor 区。创建的对象将 Eden 区全部挤满,这个对象就是「挤满新生代的最后一个对象」。此时,Minor Gc 就触发了。
2、在正式 Minor Gc 前,JVM 会先检查新生代中对象,是比老年代中剩余空间大还是小。Minor Gc 之后 survivor 区不放剩余对象,这些对象就要进入到老年代,所以要提前检查老年代是不是够用。
3、老年代剩余空间如果大于新生代中的对象大小,那就直接 Minor Gc,Gc 完survivor 不够放,老年代够放。
老年代剩余空间如果小于新生代中的对象大小,这时候就要进入老年代空间分配担保规则。
4、老年代空间分配担保规则:如果老年代中剩余空间大小,大于历次 Minor Gc 之后剩余对象的大小,那就允许进行 Minor Gc。因为从概率上来说,以前的放的下,这次的也应该放的下。那就有两种情况:
一:老年代中剩余空间大小,大于历次 Minor Gc 之后剩余对象的大小,进行 Minor Gc
二:老年代中剩余空间大小,小于历次 Minor Gc 之后剩余对象的大小,进行 Ful GC,把老年代空出来再检查。

结合第四步,开启老年代空间分配担保规则只能说是大概率上来说,Minor Gc 剩余后的对象够放到老年代,如果放不下:Minor Gc 后会有这样三种情况:
Minor Gc 之后的对象足够放到 survivor 区,Gc 结束。
Minor Gc 之后的对象不够放到 survivor 区,接着进入到老年代,老年代能放下,那也可以,GC 结束
Minor Gc 之后的对象不够放到 survivor 区,老年代也放不下,那就只能 Full GC。
以上是成功 GC 的例子,以下3 中情况,会导致 GC 失败,报 OOM:
紧接上一节 Ful GC 之后,老年代任然放不下剩余对象,就只能 00M.
未开启老年代分配担保机制,且一次FuI GC 后,老年代任然放不下剩余对象,也只能 OOM。
开启老年代分配担保机制,但是担保不通过,一次Ful GC 后,老年代任然放不下剩余对象,也是能 OOM。
注:
老年代分配担保机制在JDK1.5以及之前版本中默认是关闭的,需要通过HandlePromotionFailure手动指定,JDK1.6之后就默认开启。如果我们生产环境服务使用的是JDK/1.7JDK1.8,所以不用再手动去开启担保机制。
Full GC主要指新生代、老年代、metaspace上的全部GC

使用G1垃圾回收器的例子
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm
深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。,java,流程图,开发语言,jvm文章来源地址https://www.toymoban.com/news/detail-857123.html

到了这里,关于深入理解JAVA垃圾收集器CMS,G1工作流程原理 GC流程图 什么社会触发Minor GC?触发MinorGC过程。Full GC 过程。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

    《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

    下文是阅读《深入理解Java虚拟机(第3版)》这本书的读书笔记,如有侵权,请联系删除。 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有

    2024年02月03日
    浏览(9)
  • G1垃圾收集器-JVM(十三)

    G1垃圾收集器-JVM(十三)

    上篇文章说了CMS垃圾收集器使用以及三色标记如何解决cms的一些问题。分别有初始标记,并发标记,重新标记,并发清理,并发重置。 CMS垃圾收集器三色标记-JVM(十二) G1收集器(Garbage-First) -XX:+UseG1GC 这是一款面向服务器的垃圾收集器,主要针对 设备多核cpu和大内存的机

    2024年02月16日
    浏览(11)
  • 【JVM】JVM收集器CMS与G1区别

    【JVM】JVM收集器CMS与G1区别

    CMS收集器和G1收集器的区别 CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用 G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用 CMS收集器以最小的停顿时间为目标的收集器。 G1收集器可预测垃圾回收的停顿时间(建立可预测的停顿时间

    2024年02月08日
    浏览(15)
  • 详细了解G1、了解G1、G1垃圾收集器详解、G1垃圾回收器简单调优

    详细了解G1、了解G1、G1垃圾收集器详解、G1垃圾回收器简单调优

    4.详细了解G1: 4.1.一:什么是垃圾回收 4.2.了解G1 4.3.G1 Yong GC 4.4.G1 Mix GC 4.5.三色标记算法 4.6.调优实践 5.G1垃圾收集器详解 5.1.G1垃圾收集器 5.2.G1的堆内存划分 5.3.G1的运行过程 5.4.三色标记 5.4.1.漏标问题 5.5.记忆集与卡表 5.6.安全点与安全区域 6.G1垃圾回收器简单调优 6.1.堆 6.2

    2024年02月11日
    浏览(13)
  • JVM垃圾回收算法和CMS垃圾收集器

    JVM垃圾回收算法和CMS垃圾收集器

    目录 判断一个对象是否死亡? 1、引用计数法  2、可达性分析算法 三色标记 垃圾收集算法 1、分代收集理论  2、垃圾回收算法 标记-清除 标记-复制 标记-整理 CMS(Concurrent Mark Sweep)收集器 CMS垃圾收集器步骤 CMS垃圾收集器优缺点 垃圾收集需要完成的三件事情: 哪些内存需

    2024年02月10日
    浏览(13)
  • CMS垃圾收集器&三色标记-JVM(十二)

    CMS垃圾收集器&三色标记-JVM(十二)

    上篇文章说了CMS垃圾收集器是赋值清除,所以他不可以碎片整理,于是jvm支持两个参数,几次fullGC之后碎片整理压缩空间。Cms他会抢占cpu资源,因为是并行运行,所以会有浮动垃圾。还有执行不确定性,垃圾收集完,继续进入新的对象,导致异常concurrent mode faliture,最后用

    2024年02月16日
    浏览(10)
  • JVM(Java Virtual Machine)G1收集器篇

    JVM(Java Virtual Machine)G1收集器篇

    本文参考《深入理解Java虚拟机》,本文主要介绍G1收集器的收集思想和具体过程(填上一篇文章留下的坑) 本系列其他文章链接: JVM(Java Virtual Machine)内存模型篇 JVM(Java Virtual Machine)垃圾收集算法篇 JVM(Java Virtual Machine)垃圾收集器篇 G1是一款主要面向服务端应用的垃圾

    2024年02月07日
    浏览(16)
  • 小研究 - Java虚拟机垃圾收集器的性能分析与调节

    小研究 - Java虚拟机垃圾收集器的性能分析与调节

    垃圾收集器是Java虚拟机(JVM)的核心组成部分之一,对Java虚拟机的性能有非常重要的影响。本文将介绍GC的工作原理以及对象回收算法,重点介绍JVM的分段回收技术;剖析JVM自带的GC性能分析工具;阐述如何通过命令行参数调节GC的运行,提

    2024年02月11日
    浏览(10)
  • 从原理聊JVM(二):从串行收集器到分区收集开创者G1

    作者:京东科技 康志兴 随着Java的进化过程,涌现出各种不同的垃圾回收器,从串行执行到并行执行,从高吞吐到低延迟,终极目标就是让开发人员专注于程序的代码书写而无需关注内存管理。 JDK早期出现的垃圾回收器通常单独作用于不同分代,到后期出现的G1开始,才可以

    2023年04月24日
    浏览(12)
  • Java虚拟机(JVM)垃圾收集器、新生代、老年代、永久代以及内存分配策略

    Java虚拟机(JVM)垃圾收集器、新生代、老年代、永久代以及内存分配策略

    在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。而新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。 新生代中一般保存新出现的对象,所以每次

    2024年02月04日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包