0


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

文章目录

前言

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

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

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

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

  1. JVM

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

  1. GC

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

  1. 清除速度快

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

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

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

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

三、复制算法(Copy)

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

  1. FROM

  1. TO

两块区域,

  1. GC

发生时,会将

  1. FROM

中的存活对象复制到

  1. TO

区域,再将

  1. FROM

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

  1. TO

区域标记为

  1. FROM

区域,原来的

  1. FROM

区域标记为

  1. TO

区域。没有内存碎片。

缺点:空间利用率较低。

标签: jvm java 开发语言

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

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

还没有评论