美文网首页
分代收集算法

分代收集算法

作者: 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 的对象会被移到老年代中。

    相关文章

      网友评论

          本文标题:分代收集算法

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