【JVM】JVM 垃圾回收算法

文章目录

  • 前言
  • 标记清除(Mark-Sweep)
      • 介绍
      • 优缺点
  • 复制(拷贝 Copying)
      • 介绍
      • 优缺点
  • 标记整理(Mark-Compact)
      • 介绍
      • 优缺点

前言

目前JVM中有三种常见的垃圾回收算法,分别是:标记清除、标记整理和复制,这三种垃圾回收算法各有优缺点,下面逐一介绍。
在读本篇文章中,如果对JVM中哪个是垃圾,哪个不是垃圾,JVM到底是怎么知道的,请先读下面这篇文章

【JVM】JVM 判断对象存活算法(引用计数算法与根可达性分析算法)


标记清除(Mark-Sweep)

介绍

标记清除算法主要分成两个阶段,就跟算法的名字一样,标记和清除,标记阶段是发现哪些对象是个垃圾后,打上标记,等到都标记完成后,就是清除阶段,清除阶段就是把该对象清掉。

下面是一个示例图,上面的图代表清理前的时候,内存中的对象分布情况,下面的图代表经过标记清除算法后,内存中的对象分布情况:

【JVM】JVM 垃圾回收算法_第1张图片

优缺点

优点:效率高。
缺点:可用内存太分散,称之为内存碎片化,如果这时候来一个大的对象,需要占到连续的内存区域,就会出现找不到可用的连续内存区域的情况。


复制(拷贝 Copying)

介绍

复制算法的思路是将内存区域一分为二,分别为A区域和B区域(注:这里的A区域和B区域只是方便理解),新产生的对象会丢在A区域内,当A区域满了以后,就会把A区域内的存活对象都移到B区域内,并在B区域内把存活对象排列好,然后A区域整体清理回收;那么如果B区域满了以后呢,就会把B区域内的存活对象移到A区域内,在A区域内把存活对象排列好,然后把B区域整体清理回收,循环往复,下面是示例图:
【JVM】JVM 垃圾回收算法_第2张图片

优缺点

优点:效率高,并且把内存空间整理了。
缺点:浪费内存,只能用内存的一半。


标记整理(Mark-Compact)

介绍

标记整理算法与标记清除算法很像,标记整理算法可分为三个阶段,前面两个阶段与标记清除算法本身一样,标记阶段是发现哪些对象是个垃圾后,打上标记,等到都标记完成后,就是清除阶段,清除阶段就是把该对象清掉,剩下就到了整理阶段,整理阶段是将剩余的存活对象重新在内存区域内排列,这样做就会避免内存碎片化,下面是示例图。

【JVM】JVM 垃圾回收算法_第3张图片

优缺点

优点:清除垃圾对象后把内存排列好了。
缺点:效率低,是这三种算法中效率最低的,。





End


你可能感兴趣的:(JVM,jvm,算法,java)