美文网首页Java语言基础
JVM-024-垃圾收集算法-复制算法

JVM-024-垃圾收集算法-复制算法

作者: 53b3f4658edc | 来源:发表于2018-03-07 09:08 被阅读46次
  • 为了解决效率问题,一种称为“复制”(Copying)的收集算法出现了,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要移动堆顶指针,按顺序分配内存即可,实现简单,运行高效。只是这种算法的代价是将内存缩小为了原来的一半,未免太高了一点。复制算法的执行过程如下图。


    微信公众号:JavaWeb架构师
  • 现在的商业虚拟机都采用这种收集算法来回收新生代,IBM公司的专门研究表明,新生代中的对象98%是“朝生夕死”的,所以并不需要按照1 : 1的比例来划分内存空间,而是将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中一块Survivore。当回收时,将Eden和Survivor中还存活着的对象一次性地复制到另外一块Survivor空间上,最后清理掉Eden和刚才用过的Survivor空间。HotSpot虚拟机默认Eden和Survivor的大小比例是8: 1,也就是每次新生代中可用内存空间为整个新生代容量的90%(80%+10%),只有10%的内存会被“浪费”。当然,98%的对象可回收只是一般场景下的数据,我们没有办法保证每次回收都只有不多于10%的对象存活,当Survivor空间不够用时,需要依赖其他内存(这里指老年代)进行分配担保(Handle Promotion)。

  • 内存的分配担保就好比我们去银行借款, 如果我们信誉很好,在98%人的情况下都能按时偿还,于是银行可能会默认我们下一次也能按时按量地偿还贷款,只需要有一个担保人能保证如果我不能还款时,可以从他的账户扣钱,那银行就认为没有风险了,内存的分配担保也一样,如果另外一块Survivor空间没有足够空间存放上一次新生代收集下来的存活对象时,这些对象将直接通过分配担保机制进入老年代。


其它



源码下载:

关注下方微信公众号,
回复:
JVM.code
完整教程PDF版本下载

相关文章

  • JVM-024-垃圾收集算法-复制算法

    为了解决效率问题,一种称为“复制”(Copying)的收集算法出现了,它将可用内存按容量划分为大小相等的两块,每次...

  • JVM第四天-垃圾收集器

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

  • 垃圾收集

    垃圾收集算法 标记清除法:循环应用 引用计数法:空间碎片 复制算法:新生代使用该算法进行垃圾收集 标记压缩算法:老...

  • 读书笔记-GC基础垃圾收集算法整理

    GC基础垃圾收集算法整理 简单概括如下4种算法: 标记-清除算法 复制算法 标记-整理算法 分代收集算法 对象死亡...

  • 知识点总结

    GC算法 标记-清除算法,标记-整理算法,复制算法,分代收集算法 垃圾收集器 (1)Serial收集器 只用一个线...

  • JVM:(GC)垃圾收集算法 学习笔记

    一.垃圾收集算法 类型 1.标记-清除 算法 2.复制 算法 3.标记-整理 算法 4.分代收集 算法 二.标记-...

  • 常见面试题

    JVM JVM 内存结构 垃圾收集策略与算法记回收,标记清除,复制算法 HotSpot 垃圾收集器 cms hos...

  • Java GC 的那些事(下)

    收集算法 垃圾收集算法主要有:标记-清除、复制和标记-整理。 1、标记-清除算法 对待回收的对象进行标记。 算法缺...

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

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

  • 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

    常见的垃圾回收算法有: 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法 标记—清除算法包括...

网友评论

    本文标题:JVM-024-垃圾收集算法-复制算法

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