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、分代回收

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

  • 相关阅读:
    HyperV创建NAT网络
    Win10
    ConEmu
    ffmpeg的centos、msys2、msvc编译
    7z压缩gopath的src的批处理
    VS2015自带v120的Platform Toolset
    Putty配置
    第一章:HTML5的基础
    java的错题整理
    第十四章:类的带参方法
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860668.html
Copyright © 2011-2022 走看看