四种GC算法

Posted jjpp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四种GC算法相关的知识,希望对你有一定的参考价值。

四种GC算法

GC垃圾回收,首先需要判断哪些对象需要回收

判断对象存活

可达性分析

? 从GC Roots开始向下查询,如果一个对象到任何一个GC Root对象都没有一个引用链相连的话,说明此对象不可用。

? 四个GC Root对象

  1. JVM栈中引用的对象
  2. 方法区静态属性引用的对象
  3. 方法区中常量引用的对象
  4. 本地栈中JNI中引用的对象

四种GC算法

引用计数

? 每个对象都有一个引用计数属性,多一个引用+1,少一个引用-1,为0的时候代表可以回收。

? 致命缺点:无法解决循环引用

复制算法

? 将内存分为两块,当一块内存用完了,就将存活的对象复制到另一块内存中。

? 优点:空间连续,没有内存碎片,运行效率高。

? 缺点:占用内存,如果复制长期生存的对象,会导致效率低。

? 主要用在新生代,因为新生代对象存活率低。

标记-清除

? 先标记出需要清除的对象,再将标记的对象回收。

? 优点:占用内存小

? 缺点:

? (1)需要进行两次动作,标记和清除,所以效率低。

? (2)回收完之后,内存不连续,会有内存碎片

标记-压缩

? 先标记出需要清除的对象,但是不进行回收,而是让所有存活对象都向一段移动,然后清除边界之外的内存空间。

? 优点:占用内存小,没有内存碎片

? 缺点:效率低

分代收集

? 根据Java堆的新生代和老年代的特点,选用不同的回收算法。新生代内存空间大,对象会大量死去,回收频繁,使用效率高的复制算法,只需要每次复制少量存活下来的对象即可。老年代内存空间小,对象存活率高,使用标记-清除/标记-压缩算法。

以上是关于四种GC算法的主要内容,如果未能解决你的问题,请参考以下文章

GC最初步的认识!!

理解JVM之GC&内存分配

JVM——Minor GCMajor GC和Full GC之间的区别

深入理解JVM——虚拟机GC

GC 算法(实现篇) - GC参考手册

4. GC 算法(实现篇) - GC参考手册