JVM---垃圾回收算法介绍

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

目录

分代收集理论

三种垃圾回收算法

标记-清除算法(最基础的、基本不用)

标记-复制算法

标记-整理算法


正式因为jvm有了垃圾回收机制,作为java开发者不会去特备关注内存,不像C和C++。

优点:开发门槛低、安全

缺点:性能问题。c和c++可以自己操控内存等,性能更高

垃圾回收学的是算法,垃圾回收有很多种算法,学完这个的目标一个是需要学习人家的思路,第二个是需要根据自己的业务特色去选用特定的垃圾回收算法

分代收集理论

建立在两个假说之上:

        弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。

        强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。

原理:收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储。根据不同区域采取不同的垃圾回收算法。至少将java堆分为两部分:新生代和老年代。新生代中存朝生夕灭的对象,老年代中存熬过很多次垃圾回收。新生代熬过一次加一,到特定数值移到老年代中。

分代的好处:时间开销、内存空间的有效利用

分代的弊端:如果新生代中的对象被老年代中引用,则在每次回收需要扫描所有老年代检查饮用者是否是否存活,即跨界引用的问题。

分代弊端的解决方法:为了解决跨代引用,增加第三条法则:跨代引用相对同代引用更容易存活,很容易成为老年代对象,进而成为同代引用。同时为了不扫描整个老年代,老年代开辟出一块空间,这块空间只放跨代引用的对象

三种垃圾回收算法

标记-清除算法(最基础的、基本不用)

        原理:标记哪些对象存活那些死亡,然后清除死亡的

        弊端

                ①、效率问题:如果Java堆中包含大量对象,而且其中大部分是需要被回收的,这时必须进行大量标记和清除的动作,导致标记和清除两个过程的执行效率都随对象数量增长而降低

                ②、内存碎片问题:之后可能因为没有足够的空间放大文件而导致下一次的垃圾回收提前

标记-复制算法

        原理:空间分为1:1,在用的时候用一半,垃圾清除的时候将所用一半中不需要清除的顺序地放到另一半上。研究表明,百分之98的对象熬不过第一轮垃圾清除,所以不需要1:1。将jvm堆区域分为三份(80%、10%10%),每次新生代可用的内存空间为其中的两份占90%,而将其中不需要清理的放到剩余的百分之十上面,再次使用时空间为80%和这百分之10

        解决了效率问题和内存碎片的问题

标记-整理算法

        产生原因:标记复制中对象存活率较高时需要进行较多的复制操作,效率低。

        原理:先标记,将存活的对象移动到一端,然后设置边界,另外一端全删。解决了碎片化的问题,

        弊端:如果每次回收有大量存活,移动和更新耗费大量资源。在标记的时候需要停下所有的应用程序,不然可能标记完之后再次更改空间大小,使得标记的数据不准确。内存的访问是用户程序中最频繁的操作之一,假如宕机的话,会直接影响应用程序的运行

        解决方法:在平时进行标记清除,碎片化程度影响内存分配时进行标记整理

        注:通常标记-清除算法也是需要停顿用户线程来标记、清理可回收对象的,只是停顿时间相对而言要来的短而已。

        文章来源地址https://www.toymoban.com/news/detail-663185.html

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

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

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

相关文章

  • JVM G1垃圾回收机制介绍

    G1(Garbage First)收集器 (标记-整理算法): Java堆并行收集器,G1收集器是JDK1.7提供的一个新收集器,G1收集器基于“标记-整理”算法实现,也就是说不会产生内存碎片。此外,G1收集器不同于之前的收集器的一个重要特点是:G1回收的范围是整个Java堆(包括新生代,老年代),而其

    2024年02月13日
    浏览(32)
  • 【JVM】垃圾回收算法

    标记-清除算法将垃圾回收分为两个阶段,标记阶段和清除阶段 在标记阶段首先通过GC Roots,标记所有从根节点开始的对象,未被标记的对象就是未引用的垃圾对象。然后,在清除阶段,清除未被标记的对象。 适合场景: 1、存活对象较多的情况下比较高效 2、使用于老年代

    2024年01月16日
    浏览(41)
  • jvm垃圾回收相关的算法

    JVM主要通过以下几种方式来判断对象是否需要回收: 引用计数法:JVM通过引用计数器来判断对象的引用数量,当引用数量为0时,表示对象可以被回收。 可达性分析算法:JVM通过根对象(如栈中的引用、静态变量等)出发,对对象进行可达性分析,判断对象是否可被访问到,

    2024年02月02日
    浏览(60)
  • JVM之三大垃圾回收算法

    提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 复制算法的核心就是, 将原有的内存空

    2024年02月14日
    浏览(52)
  • 【JVM篇】有哪些垃圾回收算法

    主要分为下面2个阶段 标记阶段,将所有存活的对象进行标记。Java中使用可达性分析算法,从GC Root开始通过引用链遍历出所有存活对象 清除阶段,从内存中删除没有被标记的对象(非存活对象) 优点:实现简单,只需要在第一阶段给每个对象维护标志位,第二阶段删除对象

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

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

    2024年02月10日
    浏览(47)
  • JVM-垃圾回收(标记算法,收集器)

    申明:文章内容是本人学习极客时间课程所写,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。 原资料地址:课程资料 垃圾回收的基本原理 1 什么是垃圾? 在内存中,没有被引用的对象就是垃圾。 2 如果找到垃圾对象? 引用计

    2024年02月21日
    浏览(54)
  • 说一下 JVM 有哪些垃圾回收算法?

    标记无用对象,然后进行清除回收。 标记-清除算法(Mark-Sweep)是一种常见的基础垃圾收集算法,它将垃圾收集分为两个阶段: 标记阶段:标记出可以回收的对象。 清除阶段:回收被标记的对象所占用的空间。 标记-清除算法之所以是基础的,是因为后面讲到的垃圾收集算法

    2024年02月22日
    浏览(42)
  • 【Java】图解 JVM 垃圾回收(一):GC 判断策略、引用类型、垃圾回收算法

    垃圾 是指运行程序中 没有任何引用指向的对象 ,需要被回收。 内存溢出 :经过垃圾回收之后,内存仍旧无法存储新创建的对象,内存不够溢出。 内存泄漏 :又叫 “ 存储泄漏 ”,对象不会再被程序使用了,但是 GC 又不能回收它们。例如:IO 流不适用了但是没有被 Close、

    2024年02月19日
    浏览(50)
  • JVM——分代收集理论和垃圾回收算法

    弱分代假说 :绝大多数对象都是朝生夕灭的。 强分代假说 :熬过越多次垃圾收集过程的对象越难以消亡。         这两个分代假说共同奠定了多款常用的垃圾收集器的一致的设计原则: 收集器应该将Java堆划分出不同的区域 ,然后将 回收对象依据其年龄 (年龄即对象熬

    2024年02月12日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包