2.1GC系列-------如何进行回收(方法论)

本篇针对第二个问题:如何对垃圾进行回收-方法论

首先讲解垃圾回收算法,垃圾回收算法是一个演变的过程。

  • 标记-清除算法:首先标记要回收的对象,然后进行回收。
    缺点:产生大量内存碎片

  • 复制算法:算法原理是将内存划分成两半A、B,每次只使用其中的一半,当发生GC的时候将未被标记的区域复制到另一半,然后再将另一半全部清除掉。在实际的使用中,新生代就会使用复制算法,分为一个较大的eden区和两个较小的survior区域,一般比例是8:1:1。每次分配新对象就是分配在一个eden和survior中,当回收时就把存活对象放在另一个survior中。
    缺点:如果是将内存对半分,则太浪费内存了。

  • 标记-整理算法:算法原理是针对标记-清除算法会产生大量内存碎片,现在则是将存活对象向同一个方向进行移动,然后再将剩余的死亡对象给清除掉。针对老年代对象大多数都存活的特点,一般会使用这个算法。

  • 分代收集算法:将内存分区,对不同内存使用不同的收集算法。
    新生代:对象存活率低,只有少量能存活,有老年代能担保,所以可选择复制算法。
    老年代:对象存活率高,只有少量死去,没有内存为其担保,所以可选择标记-整理或标记-清除算法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容