zoukankan      html  css  js  c++  java
  • 【JVM之美】垃圾收集算法

    1、标记-清除

    在这里插入图片描述
    将存活的对象进行标记,然后清理掉未被标记的对象。
    不足:
    标记和清除过程效率不高
    会产生大量不连续的内存碎片,导致无法给大对象分配内存

    2、标记-整理

    在这里插入图片描述
    让所有存活的对象都向一端移动,然后直接清理掉边界以外的内存。

    3、复制

    在这里插入图片描述
    将内存划分成大小相等的两块,每次只使用其中一块,当这一块内存用完了就将还存活的对象复制到另一块上面。然后再把使用过的内存空间进行一次清理。
    主要不足是只使用了内存的一半。
    现在的商业操作虚拟机都采用这种收集算法回收新生代,但是并不是将新生代划分成大小相等的两块,而是分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden空间和其中一块Survivor,在回收时,将Eden和Survivor中还存回的对象一次性复制到另一块Survivor空间上,最后清理Eden和使用过的那一块Survivor.
    HotSpot虚拟机的Eden和Survivor的大小比例默认为8:1 保证了内存的利用率高达90%。如果每次回收有多于10%的对象存活,那一块Survivor空间就不够用了,此时需要依赖于老年代进行分配担保,也就是借用老年代的空间存放放不下的对象。

    4、分代回收

    现在的商业商业虚拟机采用分代收集算法,他根据对象的存活周期将内存划分为几块,不同块采用适当的收集算法,
    一般将堆分为新生代和老年代
    新生代使用:复制算法
    老年代使用:标记-清除算法 标记-整理算法

  • 相关阅读:
    parseInt 的第二个参数
    htm Dom对象与 Xml Dom对象的理解
    js 立即执行函数,() .则前面的function 是表达式,不能是函数申明
    Promise A 规范的一个简单的浏览器端实现
    css3,环绕圆环 loading,小组件
    有用的小程序的总结
    STM32定时器的小问题总结
    stm32 串口发送数据第一字节丢失
    嵌入式C语言编程小知识总结
    STM32多通道ADC操作
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860668.html
Copyright © 2011-2022 走看看