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、内存分配与回收策略
注意区分垃圾收集器和回收策略,垃圾收集器是工具,回收策略是各个分代如何选择垃圾收集器。