GC垃圾回收基础

2024/3/6 Java虚拟机【JVM】

# 1、对象垃圾回收条件

# 1.1、引用计数算法

# 1.2、可达性算法

# 1.3、方法区垃圾回收

# 1.4、finalize()

# 2、引用类型

# 2.1、强引用

# 2.2、软引用

# 2.3、弱引用

# 2.4、虚引用

# 3、垃圾回收算法

# 3.1、标记清除算法

# 3.2、复制算法

# 3.3、标记压缩(整理)算法

# 3.4、分代收集算法

# 3.5、STW

STW(Stop-The-World):暂停所有应用程序线程(用户线程),等待垃圾回收的完成。

# 4、垃圾收集器

垃圾收集器是由执行引擎创建出来的GC线程。

# 4.1、串行垃圾收集器

  • Serial 作用于新生代,采用复制算法
  • Serial Old 作用于老年代,采用标记-整理算法

# 4.2、并行垃圾收集器

  • Parallel New作用于新生代,采用复制算法
  • Parallel Old作用于老年代,采用标记-整理算法

# 4.3、CMS(并发)垃圾收集器

CMS全称 Concurrent Mark Sweep,是一款并发的、使用标记-清除算法的垃圾回收器,该回收器是针对老年代垃圾回收的,是一款以获取最短回收停顿时间为目标的收集器,停顿时间短,用户体验就好。其最大特点是在进行垃圾回收时,应用仍然能正常运行。

# 4.4、G1垃圾收集器

G1垃圾回收器应用于新生代和老年代。HotSpot 开发团队赋予它的使命是未来可以替换掉 CMS 收集器。堆被分为新生代和老年代,其它收集器进行收集的范围都是整个新生代或者老年代,而 G1 可以直接对新生代和老年代一起回收。

JDK9之后默认使用G1

# 4.5、ZGC垃圾收集器

ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器, 是JDK 11+ 最为重要的更新之一,适用于大内存低延迟服务的内存管理和回收。

# 5、内存分配与回收策略

注意区分垃圾收集器和回收策略,垃圾收集器是工具,回收策略是各个分代如何选择垃圾收集器。

# 5.1、对象内存分配

# 5.2、Minor GC

# 5.3、Major GC

# 5.4、Full GC