初步认识Java垃圾回收算法

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

GCRoot指被栈上直接或间接引用的对象,或被本地方法栈直接或间接引用的对象,或被方法区引用的对象。
被引用的对象是不能被删除的。
如果对象跟GCRoot并没有直接或间接相连的关系,那么这些对象就可以被删除了。

初步认识Java垃圾回收算法

标记-清理:将需要删除的对象标记一下,标记完了再扫描一遍,把含有标记的对象删掉。缺点:内存碎片
标记-整理:在清除这个位置的垃圾之后,后面的对象要补上来。缺点:对象前移,代价大
复制:将内存一分为二,假设叫一区,二区。首先在一区创建这些对象,然后去打标记,标记是否需要被删除,等到一区快满了的时候,并不将标记对象删除,而是将不需要删除的对象复制到二区,并且是紧凑复制,这样避免了内存碎片,需要删除的就不复制到二区了。这样开销也不大,因为每次只需要复制一个对象,不需要移动所有对象。缺点:2倍内存

初步认识Java垃圾回收算法初步认识Java垃圾回收算法

GC过程是怎样的呢?

Young区:
对象都会在E区出生,当E区快满的时候就会触发GC,这个GC只是Young区域的GC,所以也叫Young GC。
Young GC采用复制算法,当E区快满的时候会把需要删除的对象打上标记,不需要删除的依次复制到S0区。

初步认识Java垃圾回收算法
S区和E区的大小比例是S0:S1:E=1:1:8,这是因为对象朝生夕死,幸存下来的比较少。

两块S区是交替工作的。等到E区快满了之后,对E区对象进行打标,将不需要删除的对象复制到S0区,之后将E区和S1区的对象全部删除。
等下次E区快满了之后,再将S0区和E区的对象全部打标,将不需要删除的对象全部复制到S1区。
S0和S1交替使用作为幸存下来的区域,它比直接将内存一分为二的利用率高一些。
E+S1复制到S0,E+S0复制到S1,E+S1复制到S0,… 如此往复

Old区:
每一次Young GC,如果对象活下来了,它的年龄就会加1,直到它满了6岁,就不往S区复制了,直接到Old区了。原因是如果一个对象6次Young GC都没清理掉,那它可能存在很长一段时间,直接把它放到Old区来维护,省的每次都在S区复制了。
Old区除了存一些年龄大的对象,还会存一些大对象,大对象指的是对象占用的内存大。
等到Old区快满了,也会触发GC,这个GC叫做Old GC,Old GC同时会伴随着Young GC,所以它又叫Full GC。Full GC会引起 Stop The World,Stop The World就是整个Java程序暂停,全力的来进行垃圾回收,垃圾回收主要使用标记-清理 或 标记-整理 的算法。
现在我们明确了,标记-清理、标记-整理 主要用于Full GC,复制 主要用于Young GC。
年轻代比较有名的垃圾收集器是ParNew,老年代是CMS,他们分别用了复制算法和标记-清理算法来进行垃圾回收。新版的jdk已经不建议用以前的垃圾收集器了,而是使用了全新的G1垃圾收集器文章来源地址https://www.toymoban.com/news/detail-508307.html

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

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

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

相关文章

  • 【Java虚拟机】JVM垃圾回收机制和常见回收算法原理

    1.垃圾回收机制 (1)什么是垃圾回收机制(Garbage Collection, 简称GC) 指自动管理动态分配的内存空间的机制,自动回收不再使用的内存,以避免内存泄漏和内存溢出的问题 最早是在1960年代提出的,程序员需要手动管理内存的分配和释放 这往往会导致内存泄漏和内存溢出等问

    2024年02月02日
    浏览(38)
  • Java垃圾回收-可达性分析算法,rabbitmq原理图

    虚拟机栈(栈帧中的本地变量表)中引用的对象。(可以理解为:引用栈帧中的本地变量表的所有对象) 方法区中静态属性引用的对象(可以理解为:引用方法区该静态属性的所有对象) 方法区中常量引用的对象(可以理解为:引用方法区中常量的所有对象) 本地方法栈中(Native方法)引用的

    2024年04月16日
    浏览(29)
  • 了解 JVM - 认识垃圾回收机制与类加载过程

    本篇通过介绍JVM是什么,认识JVM的内存区域的划分,了解类加载过程,JVM中垃圾回收机制,从中了解到垃圾回收机制中如何找到存活对象的方式,引用计数与可达性分析的方式,再释放垃圾对象时使用的方式,标准清除,复制算法,标准整理,分代回收等等,如有错误,请在

    2024年02月16日
    浏览(31)
  • JVM——StringTable面试案例+垃圾回收+性能调优+直接内存

    JVM——引言+JVM内存结构_北岭山脚鼠鼠的博客-CSDN博客 书接上回内存结构——方法区。 这里常量池是运行时常量池。 intern()方法  intern() 方法用于在运行时将字符串添加到内部的字符串池stringtable中,并返回字符串池stringtable中的引用。 返回值 当调用 intern() 方法时,如果字符

    2024年02月12日
    浏览(36)
  • JVM——垃圾回收(垃圾回收算法+分代垃圾回收+垃圾回收器)

    只要一个对象被其他对象所引用,就要让该对象的技术加1,某个对象不再引用其,则让它计数减1。当计数变为0时就可以作为垃圾被回收。 有一个弊端叫做循环引用,两个的引用计数都是1,导致不能作为垃圾回收,会造成内存泄露。 java虚拟机没有采用该算法。 该算法需要

    2024年02月12日
    浏览(36)
  • JVM7:垃圾回收是什么?从运行时数据区看垃圾回收到底回收哪块区域?垃圾回收如何去回收?垃圾回收策略,引用计数算法及循环引用问题,可达性分析算法

    在Java中,垃圾回收(Garbage Collection,简称GC),是自动管理内存的机制。它负责检测不再使用的对象,并释放它们所占用的内存,以供其他对象使用。 JVM内存模型认识的差不多了,就应该思考,什么样的内存模型适合什么样的GC策略,包括垃圾回收为什么会出现。实际上,很多

    2024年02月11日
    浏览(26)
  • 【JVM】11. 垃圾回收及回收算法算法

    2023年05月29日
    浏览(56)
  • 垃圾回收回收阶段算法

            当成功区分出垃圾的对象和存活的对象后,下面就是要开始回收了,目前在JVM中的垃圾回收阶段的算法有三种:标记——复制算法、标记——清除算法、标记——压缩算法。         将可用内存按照容量分为大小相等的两块,每次只使用其中的一块,在垃圾回

    2024年02月15日
    浏览(27)
  • JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)

    🤖 作者简介: 努力的clz ,一个努力编程的菜鸟 🐣🐤🐥   👀 文章专栏: 《JVM 学习笔记》 ,本专栏会专门记录博主在学习 JVM 中学习的知识点,以及遇到的问题。   🙉 文章详情: 本篇博客是学习 【狂神说Java】JVM快速入门篇 的学习笔记,关于 GC垃圾回收机制 (堆内存结

    2023年04月19日
    浏览(31)
  • 垃圾回收 -标记清除算法

    就如他的字面意思一样,由标记阶段和清除阶段构成。标记阶段是把所有的活动对象都做上标记的阶段。清除阶段是把那些没有标记的对象,也就是非活动对象回收的阶段。通过这两个阶段,就可以令不能利用的内存空间重新得到利用。 在标记阶段中,collector会为堆里所有活

    2024年02月10日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包