JVM GC四大算法

JVM GC四大算法


文章目录

  • JVM GC四大算法
  • GC四大算法
  • 一、引用计数法
  • 二、复制算法(COPY)
  • 三、标记清除算法(MARK-SWEEP)
  • 四、标记整理算法(MARK-COMPACT)
  • 五、总结


GC四大算法

一、引用计数法

描述:给每一个对象分配一个计数器,用于记录对象是否被引用,被引用一次,计数进行 + 1

优点:方便直接判断对象是否能够回收

缺点:使用计数器需要消耗一定的内存,且每一次计数的修改同样需要消耗内存

致命缺陷:如果对象间存在循环引用,则导致无法回收


二、复制算法(COPY)

描述:将有用的对象内存复制到大小相同的一块空的内存当中,这样的方法可以整理内存碎片

优点:整块的内存空间,比较适合对象的分配

缺点:空间分割,指定空间很容易满,有一部分空间一直空闲不分配


三、标记清除算法(MARK-SWEEP)

描述:分两步:标记、清除,首先标记处需要回收的对象,第二步对该对象进行回收。

优点:相对于复制算法而言,能存储更多的对象,整体可用空间更大

缺点:产生内存碎片,回收后产生一块一块的空闲内存,不利于大内存对象的分配


四、标记整理算法(MARK-COMPACT)

描述:分两步:标记、整理,首先编辑出需要回收的对象,第二步对该对象进行回收,回收后将 内存进行移动,整理出整块的空间

优点:整体空间与标记清除算法一样,因为存在内存的移动,所以其可用于分配的内存空间更大,不会产生内存碎片

缺点:垃圾回收时移动内存需要消耗cpu资源

注意:也可和标记清除算法混合使用老年代对象回收

五、总结

这里对以上四种算法进行总结:
内存效率:复制算法 > 标记清除 > 标记压缩 (时间复杂度)

内存整齐度:复制 = 标记整理 > 标记清除

内存利用率:标记整理 = 标记清除 > 复制算法

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