我是方圆,简单入入JVM的门儿

1. GC的作用范围

JVM那些事儿,GC的四种算法(二)

2. 四种GC算法

  1. 引用计数算法
    对象创建的时候,就给对象绑定一个计数器。每当有一个引用指向该对象时,计数器加一;每当有引用消除时,计数器减一。在没有引用,即计数器为0时,这个对象被垃圾回收。(JVM的实现一般不采用这种算法,而是使用标记清除算法)
  • 优点:比较简单;
  • 缺点:无法解决对象循环引用的问题;需要占用额外空间
  1. 复制算法
    该算法应用于两个幸存区中。每次只占用其中一个幸存区,当这一幸存区(From)中满时,会进行一次MinorGC,将存活下来的对象复制到另一个空的幸存区(to)中,然后之前的幸存区被清空,称为to,而另一个由空变为非空,称为From
  • 优点:不产生内存碎片
  • 缺点:有一部分内存浪费(to区)
  1. 标记清除算法
    JVM那些事儿,GC的四种算法(二)
    这个算法分为如下两个阶段,标记阶段:遍历所有的GC Roots,并将所有的存活对象进行标记;清除阶段:将遍历堆中所有的对象,将没有被标记的对象清除。
  • 优点:相比于引用计数算法,开销更小
  • 缺点:算法复杂度较高,效率比较低;没有移动对象,这种方式清理出的内存不是连续的
  1. 标记整理算法
    标记整理算法是标记清除算法的改进版。它们在标记阶段做的工作是相同的,只不过在第二个阶段,该算法并没有直接对死亡的对象进行清理,而是对所有存活的对象进行整理,放到一处存储空间,然后再把剩下的死亡对象全部清除。
  • 优点:不产生碎片空间
  • 缺点:若存活的对象很多,则效率很低

JVM那些事儿,GC的四种算法(二)

参考文献

JVM的四种GC算法

JVM:GC(垃圾回收算法)

相关文章:

  • 2021-12-26
  • 2021-07-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-09
  • 2021-07-16
猜你喜欢
  • 2021-04-15
  • 2021-06-04
  • 2021-12-27
  • 2021-11-17
  • 2021-05-12
相关资源
相似解决方案