JVM 垃圾回收(GC)算法与调优 - 实践

一、垃圾回收基础概念

1. 判断对象存活的算法

  • 引用计数法:每个对象维护一个引用计数器(Python采用)

    • 缺点:无法处理循环引用挑战

  • 可达性分析法(JVM使用):从GC Roots出发,不可达的对象判定为可回收

    • GC Roots包括:虚拟机栈中引用的对象、方法区静态属性引用的对象、方法区常量引用的对象、本地方法栈中JNI引用的对象等

2. 引用类型

  • 强引用:普通对象引用,不会被GC回收

  • 软引用(SoftReference):内存不足时回收

  • 弱引用(WeakReference):下次GC时回收

  • 虚引用(PhantomReference):无法通过虚引用获取对象,重要用于跟踪对象被回收的活动

二、垃圾回收算法

1. 基础回收算法

  • 标记-清除(Mark-Sweep)

    • 步骤:标记存活对象 → 清除未标记对象

    • 缺点:产生内存碎片

  • 复制算法(Copying)

    • 将内存分为两块,只使用一块,GC时将存活对象复制到另一块

    • 优点:无碎片;缺点:内存利用率低

    • 适用于新生代(Eden区采用此算法)

  • 标记-整理(Mark-Compact)

    • 步骤:标记存活对象 → 将存活对象向一端移动 → 清理边界外内存

    • 适用于老年代

  • 分代收集算法(Generational Collection)

    • 新生代:复制算法(Eden + Survivor)

    • 老年代:标记-清除或标记-整理

2. 现代GC算法实现

  • Serial GC:单线程,适合客户端应用

  • Parallel GC(吞吐量优先):多线程并行GC

  • CMS(Concurrent Mark-Sweep):低延迟,已废弃

  • G1(Garbage-First):JDK9+默认,面向服务端

  • ZGC:JDK11+,超低延迟(<10ms)

  • Shenandoah:RedHat开发,低延迟GC

三、垃圾回收器

垃圾回收器是 Java 虚拟机(JVM)的核心组成部分之一,它自动管理着 Java 程序的内存,负责自动回收不再被使用的对象所占用的内存,从而避免了内存泄漏和手动管理内存的复杂性。


1. 核心概念:分代收集理论

当前主流

posted @ 2025-10-25 11:37  yjbjingcha  阅读(2)  评论(0)    收藏  举报