• 技术文章 >Java >Java入门

    jvm垃圾回收算法有哪些

    青灯夜游青灯夜游2021-04-22 14:58:40原创2780

    jvm垃圾回收算法:1、“标记–清除”算法;首先标记出所有需要被回收的对象,然后在标记完成后统一回收掉所有被标记的对象。2、复制算法;将内存划分为等大的两块,每次只使用其中的一块。3、“标记–整理”算法;4、分代收集算法。

    本教程操作环境:windows7系统、java8版、DELL G3电脑。

    JVM垃圾回收算法


    两个概念:

    新生代:存放生命周期较短的对象的区域。
    老年代:存放生命周期较长的对象的区域。

    相同点: 都在Java堆上

    1.标记–清除算法

    执行步骤:

    图解:

    在这里插入图片描述
    在这里插入图片描述

    缺点:

    2.复制算法

    将内存划分为等大的两块,每次只使用其中的一块。当一块用完了,触发GC时,将该块中存活的对象复制到另一块区域,然后一次性清理掉这块没有用的内存。下次触发GC时将那块中存活的的又复制到这块,然后抹掉那块,循环往复。

    图解:

    在这里插入图片描述

    在这里插入图片描述

    优点

    缺点:

    改进

    研究表明,新生代中的对象大都是“朝生夕死”的,即生命周期非常短而且对象活得越久则越难被回收。在发生GC时,需要回收的对象特别多,存活的特别少,因此需要搬移到另一块内存的对象非常少,所以不需要1:1划分内存空间。而是将整个新生代按照8 : 1 : 1的比例划分为三块,最大的称为Eden(伊甸园)区,较小的两块分别称为To Survivor和From Survivor。

    首次GC时,只需要将Eden存活的对象复制到To。然后将Eden区整体回收。再次GC时,将Eden和To存活的复制到From,循环往复这个过程。这样每次新生代中可用的内存就占整个新生代的90%,大大提高了内存利用率。【相关推荐:Java视频教程

    但不能保证每次存活的对象就永远少于新生代整体的10%,此时复制过去是存不下的,因此这里会用到另一块内存,称为老年代,进行分配担保,将对象存储到老年代。若还不够,就会抛出OOM。

    老年代:存放新生代中经过多次回收仍然存活的对象(默认15次)。

    3. 标记–整理算法

    因为前面的复制算法当对象的存活率比较高时,这样一直复制过来,复制过去,没啥意义,且浪费时间。所以针对老年代提出了“标记整理”算法。

    执行步骤:

    图解:

    在这里插入图片描述
    在这里插入图片描述

    4. 分代收集算法

    当前大多商用虚拟机都采用这种分代收集算法,这个算法并没有新的内容,只是根据对象的存活的时间的长短,将内存分为了新生代和老年代,这样就可以针对不同的区域,采取对应的算法。如:

    MinorGC和FullGC的区别

    MinorGC:发生在新生代的垃圾回收,因为新生代的特点,MinorGC非常频繁,且回收速度比较快,每次回收的量也很大。
    FullGC:发生在老年代的垃圾回收,也称MajorGC,速度比较慢,相对于MinorGc慢10倍左右。进行一次FullGC通常会伴有多次多次MinorGC,。

    更多编程相关知识,请访问:编程视频!!

    以上就是jvm垃圾回收算法有哪些的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:jvm垃圾回收算法
    上一篇:如何解决javac不是内部或外部命令,也不是可运行程序的问题 下一篇:jdbc连接数据库的步骤是什么
    线上培训班

    相关文章推荐

    • 深入浅出JVM内存数据区域• JVM中的运行时数据区域是哪些• JVM中必须掌握的一些参数• 怎么查看jvm和线程使用情况• JVM学习之 Java内存结构

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网