码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JAVA——JVM中垃圾回收算法


    目录

    一、标记-清除算法

    二、标记-整理算法

    三、复制算法

    四、分代收集算法


    jvm中的五种垃圾回收算法,分别是:(1)标记-清除算法(2)标记-整理算法(3)复制算法(4)分代收集算法

    一、标记-清除算法

     此算法分为标记和清除两个阶段,首先标记出要存活的对象,然后统一回收所有未标记的对象。

    缺点:

    (1)标记和清除的效率都交低。

    (2)如图可以看出,算法执行后会产生大量的不连续的空间碎片,对后面申请大的连续空间时就会产生影响。

    二、标记-整理算法

     同样也分为标记和整理两个阶段,标记阶段和标记-清除算法一样,首相标记出要存活的对象,然后让标记的对象向一端移动整理,最后回收边界以外的内存。

    优点:相比于标记-清除算法,解决了大量不连续的碎片内存问题。

    缺点:在移动局部对象的过程中,降低了效率。

    三、复制算法

     复制算法会将内存分配为大小相等的两块,每次使用其中的一块;然后罢使用的那块内存中存活的对象复制到另一块去,使用的那块空间一次清理掉。(就是平均分两成两块,一块满了,把存活的复制到立一块去,清理掉原来的)

    缺点:这样会使内存缩小一半(因为平均分成两份了)

    使用复制算法来回收新生代(yong generation如下图,主要发生在S0和S1):

    1、新生代(yong generation)内存分为两块,一块较大的endn空间和两块较小的survivor空间。

    2、每次使用Eden和一块Survivor(比如S0),当进行回收时,将Eden和Survivor中还存活的对象一次性复制到另一个Survivor(比如S1)空间上。然后,清理掉Eden和刚刚使用过的Survivor空间。(其中HotSpot虚拟机默认Eden和Survivor的大小比例为8 : 1)

    四、分代收集算法

     分代收集一般包括年轻代、老年代 和 永久代。

    新生代(Young generation)

    由第三点我们知道,新生代一开使使用的是endnr内存,当内存空间使用满了之后推向S0,在S0满了之后,进行一次GC清理,还有剩余的存活对象就复制到另外一个S1内存中,清除S0内存,然后继续接受endn分配的对象(这里使用复制了的S1),当S1满级了之后,又GC清除,剩余存活对象又复制到S0,依次反复,经历了15次GC的对象就会推到老年代。(简记:endn满推向S0,S0满GC,复制到S1,S1满GC,复制到S0,........15次后,老年代)

    其中大部分对象在新生代就会消失,这个过程叫做minor GC。

    又大量的对象在这里消失死亡,适合采用复制算法回收。

    老年代(old generation)

    在新生代存活下来的对象,会被拷贝到老年代,所以内存空间会比较大,而且在老年代中进行GC的次数没有新生代那么多,对象从老年代中消失的过程,可以称之为major GC(或者full GC)

    对象存活率高,适合使用标记-清理算法和标记-整理算法进行回收

  • 相关阅读:
    视频剪辑教程:批量修改视频尺寸的简单方法
    22:第三章:开发通行证服务:5:联调【发送短信,接口】,解决跨域问题;(使用CorsFilter过滤器,在Spring Boot上解决跨域访问问题;)
    C#面:dot net core里面的路径是如何处理的?
    【多媒体技术与实践】使用OpenCV处理图像(实验三.上)
    javaEE - 2(11000字详解多线程)
    02 Redis的基本数据结构和常用命令
    Jackson公司蛋白质电印迹方法&确认蛋白质转移
    Java中加号的多种用途
    【Linux】-进程间通信-命名管道文件(没有关系的进程间进行通信),以及写一个日志模板
    RabbitMQ如何保证消息不丢失呢?
  • 原文地址:https://blog.csdn.net/weixin_45754865/article/details/126914697
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号