美文网首页
Java内存回收算法

Java内存回收算法

作者: 雁阵惊寒_zhn | 来源:发表于2020-09-15 10:16 被阅读0次

    标记—清除算法(Mark-Sweep)

    1. 标记需要回收/不需要回收的对象
    2. 清除需要回收的对象

    缺点:

    • 效率不稳定,需要标记太多待回收对象
    • 空间碎片化,产生大量碎片空间

    标记—复制算法

    Appel式回收——HotSpot虚拟机的Serial、ParNew、Parallel Scavenge等新生代收集器策略。新生代划分为伊甸园(Eden)空间和两块较小的Survivor空间,默认Eden和Survivor大小比例为8:1。

    • 每次分配内存,只使用Eden和一块Survivor(from)
    • 回收空间时,将Eden和Survivor(from)中存活的对象复制到另外一块Survivor(to)中
    • 清空Eden和Survivor(from)中未存活的对象
    • 下一次分配时,两块Survivor(to)和Survivor(from)角色互换,Survivor(to)变为Survivor(from),与Eden一起接受新分配的对象
    • “逃生门”设计——分配担保机制,如果Survivor(to)空间不足以容纳存活的对象,那么存活对象直接进入老年代

    注意:Appel式回收在HotSpot虚拟机的Serial、ParNew、Parallel Scavenge等新生代收集器中使用,不同的虚拟机,不同的垃圾回收器使用的策略不同,例如G1收集器就有了颠覆性的算法改进。好多初学者,甚至企业的面试官都把这种标记—复制策略认为是关于垃圾回收策略问题的唯一标准答案,好像垃圾回收策略就应该都是这样的,这种理解是不正确的。

    标记—整理算法(Mark-Compact)

    在标记—清除算法基础上多了一步整理的过程。

    1. 标记需要回收的对象
    2. 把所有存活的对象移动到内存的一端
    3. 清理存活对象空间以外的所有内存

    缺点:(相较标记—清除算法)

    • 移动整理对象,回收过程更加复杂
    • 移动对象时,必须暂停用户进程

    相关文章

      网友评论

          本文标题:Java内存回收算法

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