自学内容网 自学内容网

15.JVM垃圾收集算法

一、垃圾收集算法

1.分代收集理论

    分代收集理论是JAVA虚拟机进行垃圾回收的一种思想,根据对象存活周期的不同将内存分成不同的几个区域;一般将JAVA堆内存分为新生代和老年代;根据每个分代特点选择不同的垃圾收集器;

    在新生代中,每次收集的对象(超过99%)都会立即被清理掉,采用复制算法,每次只需要付出很少的复制成本就可以完成垃圾收集;

    在老年代中,对象的存活几率较高,存活周期较长,并且没有额外的空间进行分配担保,所以必须选择标记-整理或者标记-清除的算法;注意这种算法效率较低,会是复制算法的10倍以上;

2.标记复制算法

为了解决效率问题,采用复制算法,将堆内存分成2部分,每次使用其中一块,当这块使用完了之后,就将少数存活的对象复制到另外一块区域,之前使用的区域则全部删除;

右侧为未使用区域,左侧 蓝色存活对象; 灰色回收对象,白色未使用对象,当进内存使用到一半时(左侧用满),将存活的对象复制到右侧,左侧全部清空

复制整理后

左侧全部为未使用区域,右侧为复制整理后的存活对象

3.标记-清除算法

分为标记和清除2个阶段,标记存活的对象,统一回收未被标记的对象;

问题:1.效率低下(若标记对象太多,效率不高)

           2.空间问题(标记清除后会产生很多空间碎片)

标记清除之前

标记清除之后

4.标记-整理算法

    根据老年代的特点出的一种标记算法,标记过程仍然和标记-清除算法一样,后续不是直接清除未标记的对象,而是让存活的对象统一移动到内存一端,将另一端清除

标记整理之前

标记整理之后


原文地址:https://blog.csdn.net/Csdn_xzh/article/details/142960799

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!