美文网首页
(四)JVM-垃圾收集算法

(四)JVM-垃圾收集算法

作者: Vincilii | 来源:发表于2018-07-14 19:02 被阅读0次

垃圾回收算法的好坏直接影响到程序运行效率,接下来对几种常见的回收算法进行介绍。

标记-清除算法(Mark-Sweep)

该算法是最基础的收集算法,算法分“标记”和“清除”两部分。 回收过程是标记出需要所有需要回收的对象,在标记完成后统一回收被标记的对象

  • 不足
    1. 标记和清除两个过程效率并不高。
    2. 标记清理过后会产生大量的不连续的碎片内存,空间内存碎片太多会导致在需要分配大对象时找不到合适的连续内存进行分配。这样就会提前触发一次垃圾回收动作。执行过程如下图:


      标记-清除算法示意图

复制算法(Copying)

为了解决效率问题而出现了复制算法。它将内存划分为大小两块相等的内存,每次只使用其中一块,当这块内存用完了就将还存活的对象复制到另一块上,然后把刚刚那块用完了的内存全部清理,每次都是对半个内存区域进行回收,所以在内存分配时不用考虑内存碎片的问题。


复制算法示意图
  • 优点
    算法实现简单高效
  • 缺点
    将原来将原来可用内存缩小了一半,代价昂贵。

标记-整理算法(Mark-Compact)

复制算法在存活对象较多的情况下效率比较低,更关键的是不想浪费50%的内存空间,那么就需要有额外的空间进行分配担保,已应对100%存活对象的这种极端情况。因此在老年代使用标记-整理算法。

  • 算法过程
    标记过程和标记-清理算法一致,而后续步骤则先将所有存活的对象移至一端,然后直接清理掉端边界以外的对象。


    标记-整理算法

分代收集算法(Generation Collection)

  • 堆内存划分
    在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。


    20160818221750646.jpg

    在默认情况下

新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 
Eden : from : to = 8 : 1 : 1 

JVM 每次只会使用 Eden 和其中的一块 Survivor 区域来为对象服务,所以无论什么时候,总是有一块 Survivor 区域是空闲着的。
因此,新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间。
注 堆内存划分 摘自: java堆内存划分,详情点链接查看

分代收集算法根据堆中对象生存周期的不同,对各个区域采用不同的搜集算法。在新生代中每次搜集都有大量的对象死去,少量的对象存活,所以在这个区域采用“复制算法”,而在老年代,对象存活率高,没有额外的内存分配担保,那么它必须使用“标记-整理“或”标记-清除“算法。

相关文章

  • (四)JVM-垃圾收集算法

    垃圾回收算法的好坏直接影响到程序运行效率,接下来对几种常见的回收算法进行介绍。 标记-清除算法(Mark-Swee...

  • JVM-垃圾收集--垃圾收集算法

    0. 分代收集 当前大多数商业虚拟机的垃圾收集器都遵循“分代收集”。就是针对不同的内存区域使用不同的数计算法。但是...

  • 第三章(二)GC

    本篇主要讲 垃圾收集算法 、 HotSpot的的算法实现 和 垃圾收集器。 垃圾收集算法 标记-清除算法 Mark...

  • JVM垃圾回收

    GC垃圾回收流程 垃圾收集算法 垃圾回收算法 引用类型 垃圾回收的时机 1.垃圾收集算法 (1).引用计数算法含义...

  • JVM系列(四):浅谈常用四种垃圾回收算法总结!

    常用四种垃圾回收算法 常用的垃圾回收算法有四种:标记-清除算法、复制算法、标记-整理算法、分代收集算法。 1.标记...

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

  • 4种垃圾收集算法及8种垃圾收集器

    文主要介绍4种垃圾收集算法及8种垃圾收集器: 垃圾收集算法 1、标记-清除算法(Mark-Sweep) “标记-清...

  • JVM学习笔记四【垃圾收集器】

    前文我们针对垃圾收集的区域,垃圾收集的对象,垃圾收集算法进行了介绍;而垃圾收集器就是收集算法的实现,如下是HotS...

  • JVM第四天-垃圾收集器

    一、垃圾收集器概述 垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同...

  • Java虚拟机(JVM)调优

    一、Java内存结构 二、堆内存的构成 三、堆内存参数的调整 四、GC如何确定垃圾 五、垃圾收集算法 六、垃圾收集...

网友评论

      本文标题:(四)JVM-垃圾收集算法

      本文链接:https://www.haomeiwen.com/subject/sftauftx.html