栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JVM之垃圾回收算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM之垃圾回收算法

标记清除算法

是最基础的垃圾回收算法,分为标记阶段和清除阶段。标记阶段需要标记出所有需要清除的对象,统一回收掉所有标记的对象,反之也可以通过标记出所有存活的对象,统一回收未标记的对象,可以通过可达性分析算法来标记对象是否存活。清除阶段就对标记的对象进行清除。
优点: 实现简单,基于可达性分析算法。
缺点: 如果存在大量的对象,那么需要标记和清除需要的时间就越长,执行效率不稳定。同时清除完导致内存空间不连续,导致内存空间碎片过多,导致后面创建较大对象时可能造成无法存储的问题,从而导致不得不再次进行垃圾回收。

复制算法

是标记复制算法的简称。将内存分为相同大小的两块,然后每次只是用一块,当这一块用完时,将还存活的对象复制到还未使用的内存中,然后对这块内存全部清除,循环往复。
优点: 实现简单效率高,解决了标记清除算法中存在的内存碎片化的问题。
缺点: 代价太大,导致可用内存缩小了一半,空间浪费过多,大量对象存活时,就需要复制大量的对象,导致效率较低,JVM对该算法进行了改进,应用于了新生代中,详情见博客JVM之垃圾回收过程
讲解了垃圾回收过程和空间担保机制。

标记整理算法

适用于老年代的垃圾回收算法,第一阶段同样通过可达性分析算法进行标记,然后让存活的对象向一端移动,之后清除掉边界之外的对象。因为老年代中每次回收都会存在大量存活的对象,更新对象的引用又是十分耗时的行为,而且这些行为必须进行STW,即停止用户线程。尽管有缺陷但对比空间碎片化导致对象分配访问效率而言,JVM权衡二者之后还是选择移动存活对象进行整理的方式。
想CMS收集器在多数情况下都会使用标记清除算法,暂时容忍内存碎片化的存在,直到影响了对象分配的时候在进行一次整理。所以像基于标记清除算法的收集器都会在内存碎片过多的时候进行整理。
优点: 提高了空间利用率,不会产生内存碎片。
缺点: 效率会低,执行时会STW。

分代收集算法

现在一般的垃圾收集器都采用了分代收集的理念。根据对象存活的年龄不同,分为新生代和老年代,根据年代不同,采用不同的垃圾回收算法。新生代中存活对象较少,所以采用复制算法,老年代中对象存活率较高,所以采用标记清除,和标记整理算法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356491.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号