`
lovexy
  • 浏览: 837 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JVM-GC笔记(二)--- 对象如何回收

    博客分类:
  • GC
阅读更多
    首先,目前主流的JVM实现中都采用了分代收集的算法,我们常常听到的新生代,老年代就是基于这个算法。
    新生代:存放那些朝生夕死的对象
    老年代:存放存活时间超过指定数值的对象
    还有永久代,也就是方法区。存放了类结构,静态数据等,此区域JVM规范中并不要求回收。

    1,标记-清除算法
       原理:通过可达性分析标记无效对象,然后清除。
       问题:产生大量内存碎片,碎片过多时,导致内存不够,提前触发GC

    2,复制算法(适合新生代朝生夕死的特点)
       原理:将堆分为两个区域A,B。分配对象时,在A区域分配,A不够分配时,将A中有效的对象转移到B中,然后清除A。接下来分配对象到B,B不够分配时,将有效对象转移到A中,如此反复。
       问题:空间效率太低
       解决:将堆分为一个eden区域,两个survivor区域。把eden和其中一个survivor看作原理中的A,另一个survivor看作B。转换时,把有效对象从eden和survivor中转移到另一个survivor中,然后在此survivor和eden中分配对象,如此反复。目前eden:survivor = 8:1

    3,标记-整理算法
       原理:同标记-清除算法类似,标记后,将可用的对象移动到一边,清除边界意外的其他对象。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics