• 【JVM之美】垃圾收集算法


    1、标记-清除

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

    2、标记-整理

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

    3、复制

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

    4、分代回收

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

  • 相关阅读:
    watch 监听路由的改变
    三元运算符
    element-ui动态更改el-table某个单元格字体颜色
    vue 跨域问题导致前端无法携带cookie
    Vue 用checkbox实现两两组合多选且禁用第三个。
    表格数据宽度自适应方案
    echarts细节问题
    es6 解构赋值
    学习笔记-Python基础15-持久化-文件、pickle、shelve
    学习笔记-Python基础14-PyCharm调试
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860668.html
Copyright © 2020-2023  润新知