.NET垃圾回收机制深度解析
1. 被判定代分析
在某些特定情况下,我们需要深入了解应用程序中垃圾回收(GC)发生的常见原因,以及哪些代被判定回收及其原因。例如,当我们发现频繁发生Full GC时,就需要探究其背后的原因。
目前,PerfView中的GCStats报告是分析代被判定回收情况的最佳工具。即使是记录最简单的仅进行GC收集的会话,它也会提供“Condemned reasons for GCs”表,该表几乎能解释所有相关信息。
以下是对前五次GC情况的分析:
| GC编号 | 初始请求代 | 最终代 | 判定原因 |
| ---- | ---- | ---- | ---- |
| GC #1 | 2(Full GC) | 2(Full GC) | 显式触发(Induced列中的Blocking值) |
| GC #2 | 0 | 2(Full GC) | 代0分配预算超量,且代2(实际是LOH分配预算超量)分配预算也超量 |
| GC #3 | 0 | 0 | 无其他代被判定的原因 |
| GC #4 | 0 | 1 | 代1分配预算超量 |
| GC #5 | 1 | 2(Full GC) | 由于OutOfSpaceSOH原因初始请求代1,后因代2分配预算超量变为Full GC |
仔细分析“Condemned reasons for GCs”表和“GC Events by Time”表,能让我们深入了解应用程序的GC情况。不过,这是一项繁琐的任务。我们可以查看“Condemned reasons for GCs”表,寻找常见模式和频繁出现的原因。但目前还没有工具能对判定原因进行