美文网首页
分代收集算法

分代收集算法

作者: bigdata张凯翔 | 来源:发表于2020-07-09 22:14 被阅读0次

在结合以上三种算法的综合分析及 JVM 内存对象生命周期的特点,诞生了一种新的垃圾回收算法——分代收集算法。其核心思想是根据对象存活的不同生命周期将内存划分为不同的域,一般情况下将 GC 堆划分为老年代(Tenured/Old Generation)和新生代(Young Generation)。老年代的特点是每次垃圾回收时只有少量对象需要被回收,新生代的特点是每次垃圾回收时都有大量垃圾需要被回收,因此可以根据不同区域选择不同的算法。

新生代-复制算法

因为新生代中每次垃圾回收都要回收大部分对象,即要复制的操作比较少,但通常并不是按照 1:1 来划分新生代。一般将新生代划分为一块较大的 Eden 空间和两个较小的 Survivor 空间(From Space/S0, To Space/S1),每次使用 Eden 空间和其中的一块 Survivor 空间,当进行回收时,将该两块空间中还存活的对象复制到另一块 Survivor 空间中。


image.png

老年代——标记复制算法

而老年代因为每次只回收少量对象,因而采用标记整理算法。

对象的内存分配主要在新生代的 Eden Space 和 Survivor Space 的 From Space(Survivor 目前存放对象的那一块),少数情况会直接分配到老年代;
当新生代的 Eden Space 和 From Space 空间不足时就会发生一次 GC,进行 GC 后,EdenSpace 和 From Space 区的存活对象会被挪到 To Space,然后将 Eden Space 和 FromSpace 进行清理;
如果 To Space 无法足够存储某个对象,则将这个对象存储到老年代;
在进行 GC 后,使用的便是 Eden Space 和 To Space 了,如此反复循环;
当对象在 Survivor 区躲过一次 GC 后,其年龄就会 +1。默认情况下年龄到达 15 的对象会被移到老年代中。

相关文章

  • 面试官,不要再问我“Java 垃圾收集器”了

    如果Java虚拟机中标记清除算法、标记整理算法、复制算法、分代算法这些属于GC收集算法中的方法论,那么“GC收集器...

  • 面试官,不要再问我“Java 垃圾收集器”了

    如果Java虚拟机中标记清除算法、标记整理算法、复制算法、分代算法这些属于GC收集算法中的方法论,那么“GC收集器...

  • 垃圾收集算法与垃圾收集齐ParNew&CMS详解学习笔记

    垃圾收集算法详解 分代收集理论 新生代选择复制算法老年代选择“标记-清除”或“标记-整理”算法 1. 标记-复制算...

  • jvm垃圾收集算法☞ 终极解决方案-分代收集算法

    当前商业的虚拟机垃圾收集都采用'分代收集’算法 与其说分代搜集算法是第四个算法,不如说它是对前三个算法的实际应用。...

  • JVM第二弹

    JVM第二弹 GC分代收集算法VS分区收集算法 分代收集算法 当前主流的VM垃圾收集都采用“分代收集“算法,这种算...

  • Java GC机制

    GC机制的基本算法是:分代收集,这个不用赘述。下面阐述每个分代的收集方法。 年轻代: 事实上,在上一节(Java内...

  • Java GC机制

    GC机制的基本算法是:分代收集。 年轻代: 在新生代中,使用"停止-复制"算法进行清理,将新生代内存分为2部...

  • HotSpot JVM GC收集器学习总结

    HotSpot JVM中GC收集器学习总结:分代回收 + 收集算法 1. GC收集器(Overview) 2. C...

  • 图解JVM垃圾回收

    一、垃圾收集器所属分代总览 1、各代采用的收集器 有连线的表示可搭配使用 2、垃圾回收算法 2.1、标记-清除过程...

  • JVM垃圾收集器

    JVM垃圾收器 JVM垃圾收集器收集器采用分代收集算法,堆被划分为新生代和老年代。新生代主要存储新创建的对象和尚未...

网友评论

      本文标题:分代收集算法

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