垃圾收集器

这篇具有很好参考价值的文章主要介绍了垃圾收集器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.垃圾判断

1.1 引用计数法:

1.2 可达性分析:

1.3 常见的GC Roots有:

2.垃圾回收方式:垃圾收集器

2.1 CMS收集器:

2.2 G1收集器:


1.垃圾判断

1.1 引用计数法:

        对象有一个引用计数器,引用一次计数器就加1,计数器为0就是没有引用,但存在循环引用问题

1.2 可达性分析:

        以GC Roots为起点向下搜索,经过的路径叫做引用链,若对象和GC Roots之间没有任意一条引用链,则说明不可达,两次不可达则可以回收

1.3 常见的GC Roots有:

虚拟机栈中引用的对象;本地方法栈中引用的对象;被同步锁持有的对象;方法区中静态属性引用的对象

2.垃圾回收方式:垃圾收集器

Serial收集器:单线程,新生代,标记复制算法

ParallelNew 收集器:多线程,新生代,标记复制算法

ParallelScavenge收集器:多线程,新生代,标记复制算法;专注于吞吐量,CPU的高利用率

Serial Old收集器:单线程,老年代,标记整理算法

Parallel Old收集器:多线程,老年代,标记整理算法

CMS收集器:并发标记清除,专注于最短停顿时间,实现用户线程和垃圾收集线程并发工作

G1收集器(默认):在后台维护了一个优先列表,优先回收高优先级的区域

2.1 CMS收集器:

过程:四个步骤

  • 初始标记:标记GC Roots能直接关联到的对象,速度很快

  • 并发标记:从GC Roots的直接关联对象开始遍历所有对象,此时用户线程可以和垃圾收集线程并发运行

  • 重新标记:是为了修正并发标记期间因为用户程序运行而导致标记产生变动的对象的标记记录

  • 并发清除:对未标记的区域进行清除,此时能够与用户线程并发执行

优点:能够并发收集,减少用户等待时间

缺点:标记清除算法导致的空间碎片;对CPU资源敏感;无法处理浮动垃圾(并发清除阶段,用户线程运行也会产生新的垃圾对象,此时只能在下一次垃圾回收时处理)

2.2 G1收集器:

过程:四个步骤

  • 初始标记:标记GC Roots能直接关联到的对象,并修改TAMS指针的指

  • 并发标记:从GC Roots的开始对堆中对象进行可达性分析,递归扫描堆中的对象图,找出要回收的对象

  • 最终标记:暂停用户线程,用于处理并发阶段结束后遗留的少量SATB记录

  • 筛选回收:更新Region统计数据,对各个Region的回收价值和成本排序,根据用户期望的停顿时间制定回收计划,将回收的一部分区域的存活对象复制到一个空区域中,清理到整个旧区域全部空间;此时暂停用户线程,多条垃圾回收线程并行执行

优点:不会产生内存碎片;能够指定最大停顿时间;分区域的内存布局

缺点:占用额外的内存空间(每个Region维护一个优先列表)文章来源地址https://www.toymoban.com/news/detail-672955.html

到了这里,关于垃圾收集器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

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

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

    2024年02月04日
    浏览(67)
  • JVM垃圾回收——G1垃圾收集器

    目录 一、什么是G1垃圾收集器 二、G1垃圾收集器的内存划分 三、G1垃圾收集器的收集过程  四、G1收集器的优缺点 五、G1收集器的JVM参数配置         Garbage First(简称G1)收集器是垃圾收集器技术发展史上里程碑式的成果,它摒弃了传统垃圾收集器的严格的内存划分,而是采

    2024年02月05日
    浏览(35)
  • JVM--- 垃圾收集器详细整理

    目录 一、垃圾收集需要考虑的三个事情: 二、垃圾回收针对的区域 三、如何判断对象已死         1.引用计数算法:         2.可达性分析算法 四、引用 五、生存还是死亡? 六、回收方法区 七、垃圾收集算法         1.分代收集理论 2.标记-清除算法         3.标记

    2024年02月19日
    浏览(58)
  • JVM的故事——垃圾收集器

    新生代收集器,最基础的收集器,单线程。进行垃圾收集时必须暂停其他所有工作线程,stop the world 新生代收集器,实质上是serial收集器的多线程版本。除了serial,只有它能和CMS收集器(老年代收集器)配合工作。随着处理器核心数越来越多,parnew比serial有着更好的性能。(但如

    2024年02月10日
    浏览(43)
  • 深入理解JVM垃圾收集器

    相关系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的,从上图可以看到有连线的的垃圾收集器是可以组合使用,是年轻代+老年代。为什么会出现这么多的垃圾收集

    2024年04月09日
    浏览(40)
  • 08-JVM垃圾收集器详解

    上一篇:07-垃圾收集算法详解 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较,但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做

    2024年02月09日
    浏览(38)
  • JVM ZGC垃圾收集器

    ZGC(“Z”并非什么专业名词的缩写,这款收集器的名字就叫作Z Garbage Collector)是一款在JDK 11中新加入的具有实验性质[1]的低延迟垃圾收集器,是由Oracle公司研发的。 ZGC收集器 是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术

    2024年02月10日
    浏览(39)
  • JVM:垃圾收集器(7种)

    如果两个收集器之间存在连线,就说明它们可以搭配使用。它们说在的区域则表示这个收集器属于新生代收集器还是老年代收集器。其中Serial(串行)、Parallel(并行)         Serial收集器是最基础、历史最悠久的收集器,是HotSpot虚拟机新生代收集器的唯一选择。这个收集器

    2024年01月20日
    浏览(37)
  • G1垃圾收集器-JVM(十三)

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

    2024年02月16日
    浏览(53)
  • ZGC垃圾收集器-JVM(十五)

    上篇文章说了G1的特性,无分代,复制算法,大内存就可以用G1,可预测stw时间等特性。 G1垃圾收集分类-JVM(十四) ZGC收集器 -XX:+UseZGC ZGC(Z Garbage Collector)是在jdk11新加入的低延迟垃圾收集器。 Zgc有四个目标 : 支持至少TB级别堆内存回收。(目前4TB) STW保持在10ms之内。 吞

    2024年02月16日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包