JVM垃圾收集算法 - 极悦
首页 课程 师资 教程 报名

JVM垃圾收集算法

  • 2020-09-30 15:27:39
  • 1387次 极悦

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。而JVM(Java Virtual Machine)则是Java虚拟机,是一种用于计算设备的规范。JVM垃圾收集算法是JVM和算法的完美结合,本文,让我们一起来探究这些神奇的JVM垃圾收集算法。


1.标记-清除算法

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

· 标记阶段:标记可以被回收的对象;

· 清除阶段:回收被标记的对象内存;

标记-清除算法时最基础的算法,因为后面提到的垃圾回收算法都是基于此算法的基础上面改造的,标记-清除算法的执行过程如下:

image.png


标记-清除算法主要有两个缺点:一是标记和清除的效率都不高;二是如上图所示,在标记清除可回收的对象空间后,会产生大量不连续的内存碎片,碎片太多可能会导致后续没有足够的内存分配给较大的对象,从而导致触发新一轮的垃圾收集动作。


2.复制算法

为了解决标记-清除算法带来的内存碎片的问题,于是提出了复制算法。复制算法把内存空间划分为大小相等的两块,每次只使用其中的一块,然后再把另一块内存空间清理掉:

image.png


复制算法存在着复制效率低的不足,并且如果不想浪费 50% 空间内存,则需要提供额外的空间担保,以应对被使用的内存中所有的对象都 100% 存活的极端情况。

3.标记-整理算法

复制算法一般不使用在老年代,因为在老年代中,大部分的对象的存活率比较高,选择复制算法就会导致过多的复制操作,导致效率变低。同时也不采用标记-清除算法,因为会产生过多的内存碎片,导致容易触发新的一轮垃圾回收动作。于是出现了一种标记-整理算法(标记-压缩算法)。标记-整理算法与标记-清除算法不同的是,在标记完内存中的对象以后,把存活下来的对象压缩到内存的一端,使得他们紧凑地排序在一起,然后对存活对象边界外的对象进行回收。

image.png


4.分代收集算法

分代收集算法会结合不同的多种垃圾算法来处理不同的空间,因此在学习分代收集算法之前首先需要了解 Java 堆的空间划分。Java 堆被划分为新生代(Young Generation)和老年代(Tenured Generation),而新生代又被细分为 Eden 空间、From Survivor 空间和 To Survivor 空间。因为在 Java 堆里面,大部分对象都是"朝生夕灭",只有少数的对象的生命周期比较长,甚至有的对象的生命周期和虚拟机的生命周期一样长,对不同对象地生命周期采用不同的垃圾收集算法,这就是分代收集的概念。


以上就是对JVM垃圾收集算法的完整介绍,想必也足以让大家领略到JVM垃圾收集算法的魅力所在,当然,这只是JVM垃圾收集算法的一个很小的体现方式,在本站的Java数据结构与算法实战教程中还有更多神奇的算法等你来一探究竟!


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交