梳理几个容易混淆的概念
graph TD;
Start(开始) --> CheckYoungGen[检查新生代]
CheckYoungGen -->|需要| PerformYoungGC[执行Young GC]
CheckYoungGen -->|不需要| CheckOldGen[检查老年代]
PerformYoungGC --> CheckOldGen
CheckOldGen -->|需要| PerformMixedGC[执行Mixed GC]
CheckOldGen -->|不需要| CheckFullGC[是否需要Full GC?]
PerformMixedGC --> CheckFullGC
CheckFullGC -->|需要| PerformFullGC[执行Full GC]
CheckFullGC -->|不需要| End(结束)
PerformFullGC --> CheckOOM[检查是否 OOM]
CheckOOM -->|是| End
CheckOOM -->|否| End
MinorGC、YoungGC、FullGC OldGC、MajorGC、MixedGC
◆第一组:MinorGC vs YoungGC
两者等价的, 新生代和年轻代也是一回事,当Eden区 占满之后触发对年轻代的垃圾回收
在G1之前的垃圾回收器里,两者是等价的,都是老年代被 占满之后触发对老年代的垃圾回收 在G1里不等价,G1里的Full GC是将新生代、老年代和永 久代等全部空间进行垃圾回收,显然包含的范围更广
G1的三种垃圾回收方式三种方式分别是什么含义?
新生代回收(YGC):只回收新生代区域,代价低/频率高
混合回收(MxGC):回收全部新生代+部分老年代,频率一般。
完全回收(FullGO):全部堆空间,代价高/频率低,系统距崩溃不远了。
G1 Garbage Collection Modes Sequence Diagram
Young GC (Minor GC)
- 触发时机:
- 新生代(Eden 区、Survivor 区)快要满了
- 操作:
- 清理 Eden 区和 Survivor 区
- 输出:
- 年轻代被清理,对象被移动到老年代或者 Survivor 区
Mixed GC
- 触发时机:
- 新生代快要满了
- 老年代也达到了一定的阈值
- G1 垃圾回收器认为需要进行混合回收(通常在多次 Young GC 后)
- 操作:
- 清理 Eden 区、Survivor 区以及部分老年代
- 输出:
- 年轻代和部分老年代被清理
Full GC
- 触发时机:
- 老年代几乎满了,且无法再通过 Mixed GC 或 Young GC 来获得足够的空间
- 发生几次 Full GC 仍然无法回收足够的内存
- 用户程序显式调用(如
System.gc())
- 操作:
- 清理整个堆(包括老年代和新生代)
- 输出:
- 整个堆被清理
- 如果还是不能回收足够的内存,将抛出 OOM(Out of Memory)
大对象
Arthas 使用教程
Arthas是一款强大的Java诊断工具,用于监测和诊断Java应用程序的性能问题。本教程将为您介绍Arthas的基本命令和操作,以及如何使用它来监控线上服务的内存状态、载入的类信息、方法执行情况等。
1. Arthas 简介
- Arthas概述
- 特点和优势
2. 基础命令与操作
- 启动Arthas
- 查找类和方法
- 设置断点
- 查看变量和堆栈信息
3. 监控线上服务的内存状态
- 查看内存使用情况
- 监控对象实例数量
- 分析内存泄漏
4. 监控载入的类信息
- 查看正在加载的类
- 查看类加载器信息
- 查看类的层次结构
5. 追踪方法的执行情况
- 跟踪方法入参和出参
- 计算方法耗时
- 诊断性能问题
6. 轻松绘制火焰图
- 火焰图简介
- 生成火焰图步骤
- 解读火焰图结果
7. 总结与进一步学习
- 本章总结
- 推荐学习资源