JVM垃圾收集算法

超、凢脫俗 2022-07-16 22:40 374阅读 0赞

1、标记-清除算法

Center

算法分为两个阶段 标记和清除

(1)标记出要回收的对象,在标记完成后统一回收未被标记的对象,从根节点出发,若是存在引用链就把对象进行标记。

(2)不足:标记和清除的效率都低,二是空间问题,标记清除之后会产生大量的不连续的内存碎片,空间碎片太多的话,在程序运行期间,如果需要足够连续的内存空间时不得不提前出发另一次垃圾回收动作。

2、复制算法

Center 1

将可用内存划分为大小相等的两块,每次只使用其中的一块,当这一块用完时,就将其中还存活的对象复制到另一块上去,然后把已经使用过的那块内存清理掉。这样内存分配时就不用考虑内存碎片问题了。

IBM公司专门研究过,新生代对象98%都是“朝生夕死”的,并不需要1:1来划分内存空间,而是将内存分为Eden和两块Survivor空间。

每次使用Eden和其中的一块Survivor空间。当回收的时候,将Eden和Survivor中存活的对象一次性复制到另一块Survivor空间上,将Eden和原来的Survivor清除掉。

3、标记-整理

Center 2

复制算法在对象存活率较高的时候效率比较低,在标记-清除算法的基础上提出了标记-整理算法,也是根据可达性分析进行对象标记,但是不是直接清理不可达对象,而是把可以对象都移到一边,然后清理到边界之外的内存。这样避免了内存碎片。


发表评论

表情:
评论列表 (有 0 条评论,374人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JVM垃圾收集算法

    标记-清除算法 分为标记,清除两个阶段,首先标记所有需要回收的对象,标记完成后统一回收所有被标记的对象。 主要有两个不足:一是标记和清除两个过程的效率都不高;二是标记,

    相关 JVM垃圾收集算法

    1、标记\-清除算法 ![Center][] 算法分为两个阶段 标记和清除 (1)标记出要回收的对象,在标记完成后统一回收未被标记的对象,从根节点出发,若是存在引用

    相关 JVM-垃圾收集算法

    ![70][] > 标记-清除算法(Mark-Sweep) 最基础的收集算法就是“标记-清除”算法,如同名字一样,算法分两个阶段标记和清除。 首先标记出所有需要回收的对象

    相关 JVM垃圾收集算法

    判断一个对象是否能被回收有两种方式: 1. 引用计数算法:给对象添加一个引用计数器,每当有地方引用它时,计数器加1;当引用失效时,计数器减1。任何时刻计数器为0的对象就是不

    相关 jvm垃圾收集算法

    我们知道JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生、随线程而灭,因此这几个区域的内存分

    相关 JVM 垃圾收集算法

    > 这是根据周志明老师的《深入理解Java虚拟机》整理的学习笔记,后续会更新在[深入理解Java虚拟机][Java]中,希望能够帮到一些需要速成的同学。 从如何判断对象消亡的