JVM垃圾回收算法解析

JVM垃圾回收算法解析算法

标记-清除算法markdown

该算法为最基础的算法。它分为标记和清除两个阶段,首先标记出须要回收的对象,在标记结束后,统一回收。该算法存在两个问题:一是效率问题,标记和清除过程效率都不过高,二是空间问题,在执行一次清除操做后,会存在好多不连续的内存碎片,从而形成资源的浪费。空间碎片太多将会致使,当在程序运行过程当中,须要分配较大对象的时候没法找到足够的连续内存将会致使下一次垃圾收集操做。

复制算法ide

该算法是在标记-清除算法的基础上出现的,它主要是为了提升效率,它将内存区域分为两个相等的块,每次只使用其中的一块,当一块用完了,就将还存活着的对象移动到另一块上,而后将已存在的对象所占用的内存释放掉,这样只是把其中的一块内存释放掉,也不存在内存碎片的问题,但这种的算法的效率是创建在缩小内存为原来的50%的前提上,它是用空间换空间来获取的。

标记-整理算法.net

复制算法存在一个问题,当对象存活率较高时,它会频繁的进行复制操做,这样也会致使效率低下。标记-整理算法在前两个算法的基础上出现,它的标记过程和标记-清除算法过程是同样,只是它没有对可回收的对象进行回收,而是让全部存活的对象向一测移动,而后清除掉边界之外的内存。 code

分代收集算法对象

当前商业虚拟机的垃圾收集都采用分代收集算法,它是根据对象的生存周期将内存分为几部分,它通常分为新生代和老生代,在新生代,若是发现新生代中发现有大批对象死亡,少许对象存活,则采用复制算法,只须要牺牲少许的复制成本就能够完成本次垃圾收集,而老生代由于对象存活率,没有多余的空间为其作担保,通常会使用标记-清除算法或标记-整理算法进行处理。

做者:柯之梦
来源:CSDN
原文:https://blog.csdn.net/yin4302008/article/details/85997091
版权声明:本文为博主原创文章,转载请附上博文连接!blog

相关文章
相关标签/搜索