动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

浅析4种Java垃圾回收算法

05-12 17:42 777浏览
举报 T字号
  • 大字
  • 中字
  • 小字

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。而JVM(Java Virtual Machine)则是Java虚拟机,是一种用于计算设备的规范。JVM垃圾收集算法是JVM和算法的完美结合,下面我们简要分析Java中的4种垃圾回收算法。

1.标记-清除算法

分为两个阶段:

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

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

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

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

2.复制算法

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

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

3.标记-整理算法

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

4.分代收集算法

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

上述的4种Java垃圾收集算法算是JVM处理垃圾的核心算法,我们在领略JVM垃圾收集算法的魅力的同时也要牢记这些算法的核心知识。事实上,Java垃圾回收算法为Java开发解决了很多的问题,详情我们可以在动力节点在线的视频课程中寻找相关的解决方案。

0人推荐
共同学习,写下你的评论
0条评论
杨晶珍
程序员杨晶珍

98篇文章贡献357785字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消