0


JVM(HotSpot):GC之垃圾回收阶段

文章目录

前言

标记出垃圾对象之后,就要进行清理。
那么,如何清理?

这里也有相应的算法。
主要有三种。

一、标记清除算法(Mark Sweep)

在这里插入图片描述
原理说明:如上图,在

JVM

内存空间中,根据可达性分析算法,标记出没有被引用的对象为垃圾对象,等待

GC

回收。那么,清除阶段,直接记录出垃圾对象的起始坐标和结束坐标。那么,这段坐标内,即为可用内存。所以,

清除速度快

缺点:造成空间碎片,使得较大对象无法存入,浪费了碎片空间。

二、标记整理算法(Mark Compact)

在这里插入图片描述
原理说明:这个算法,其实是在标记清除算法的基础上的一个优化。标记清除算法存在的缺点就是,空间碎片问题,所以,这里在清除垃圾对象的同时,进行存活对象的移动,把对象存放到一个连续的空间中,从而,是可用空间保持连续。解决了空间碎片问题。

缺点:因为,存活对象的移动,一定会涉及到复制工作,并且,移动后的对象,内存地址也会发生改变。从而导致,原始引用需要修改对象地址。从而造成效率低下。

三、复制算法(Copy)

在这里插入图片描述在这里插入图片描述在这里插入图片描述
原理说明:内存分为

FROM

TO

两块区域,

GC

发生时,会将

FROM

中的存活对象复制到

TO

区域,再将

FROM

中的垃圾对象清除掉。然后,将原来的

TO

区域标记为

FROM

区域,原来的

FROM

区域标记为

TO

区域。没有内存碎片。

缺点:空间利用率较低。

标签: jvm java 开发语言

本文转载自: https://blog.csdn.net/Brave_heart4pzj/article/details/143083085
版权归原作者 生产队队长 所有, 如有侵权,请联系我们删除。

“JVM(HotSpot):GC之垃圾回收阶段”的评论:

还没有评论