内存性能计数器

性能控制台 .NET CLR Memory(内存)类别包括一些计数器,这些计数器提供与垃圾回收器有关的信息。 下表描述这些性能计数器。

性能计数器

说明

# Bytes in all Heaps(所有堆中的字节数)

显示第 1 级堆大小计数器、第 2 级堆大小计数器和大对象堆大小计数器的总和。 此计数器指示在垃圾回收堆上分配的当前内存(以字节为单位)。

# GC Handles(GC 处理数目)

显示正在使用的垃圾回收处理的当前数目。 垃圾回收处理是对公共语言运行时和托管环境外部的资源的处理。

# Gen 0 Collections(第 2 级回收次数)

显示自应用程序启动后第 0 级对象(即最年轻、最近分配的对象)被垃圾回收的次数。

当第 0 级中的可用内存不足以满足分配请求时发生第 0 级垃圾回收。 此计数器在第 0 级垃圾回收结束时递增。 较高级的垃圾回收包括所有较低级的垃圾回收。 当较高级(第 1 级或第 2 级)垃圾回收发生时此计数器被显式递增。

此计数器显示最近的观察所得值。 _Global_ 计数器值不准确,应该忽略。

# Gen 1 Collections(第 2 级回收次数)

显示自应用程序启动后对第 1 级对象进行垃圾回收的次数。

此计数器在第 1 级垃圾回收结束时递增。 较高级的垃圾回收包括所有较低级的垃圾回收。 当较高级(第 2 级)垃圾回收发生时此计数器被显式递增。

此计数器显示最近的观察所得值。 _Global_ 计数器值不准确,应该忽略。

# Gen 2 Collections(第 2 级回收次数)

显示自应用程序启动后对第 2 级对象进行垃圾回收的次数。 此计数器在第 2 级垃圾回收(也称作完整垃圾回收)结束时递增。

此计数器显示最近的观察所得值。 _Global_ 计数器值不准确,应该忽略。

# Induced GC(引发的 GC 的数目)

显示因显式调用 GC.Collect 而执行的垃圾回收的峰值次数。 让垃圾回收器对其回收的频率进行微调是切实可行的。

# of Pinned Objects(钉住的对象的数目)

显示上次垃圾回收中遇到的钉住的对象的数目。 钉住的对象是垃圾回收器不能移入内存的对象。 此计数器只跟踪被进行垃圾回收的堆中的钉住的对象。 例如,第 0 级垃圾回收导致仅枚举第 0 级堆中钉住的对象。

# of Sink Blocks in use(正在使用的接收块的数目)

显示正在使用的同步块的当前数目。 同步块是为存储同步信息分配的基于对象的数据结构。 同步块保留对托管对象的弱引用并且必须由垃圾回收器扫描。 同步块不局限于只存储同步信息;它们还可以存储 COM 互操作元数据。 该计数器指示与同步基元的过度使用有关的性能问题。

# Total committed Bytes(提交字节的总数)

显示垃圾回收器当前提交的虚拟内存量(以字节为单位)。 提交的内存是在磁盘页面文件中保留的空间的物理内存。

# Total reserved Bytes(保留字节的总数)

显示虚拟内存量。 以字节为单位,当前由垃圾回收器保留。 保留内存是为应用程序保留(但尚未使用任何磁盘或主内存页)的虚拟内存空间。

% Time in GC(GC 中时间的百分比)

显示自上次垃圾回收周期后执行垃圾回收所用运行时间的百分比。 此计数器通常指示垃圾回收器代表该应用程序为收集和压缩内存而执行的工作。 只在每次垃圾回收结束时更新此计数器。 此计数器不是一个平均值;它的值反映了最近观察所得值。

Allocated Bytes/second(每秒分配的字节数)

显示每秒在垃圾回收堆上分配的字节数。 此计数器在每次垃圾回收结束时(而不是在每次分配时)进行更新。 此计数器不是一段时间内的平均值;它显示最近两个样本中观测的值的差除以取样间隔时间所得的结果。

Finalization Survivors(完成时存留对象数目)

显示因正等待完成而从回收后保留下来的进行垃圾回收的对象的数目。 如果这些对象保留对其他对象的引用,则那些对象也保留下来,但此计数器不对它们计数。 “从第 0 级提升的完成内存”和“从第 1 级提升的完成内存”计数器表示因完成而保留下来的所有内存。

此计数器不是累积计数器;它在每次垃圾回收结束时由仅在该特定回收期间存留对象的计数更新。 此计数器指示由于完成应用程序可能导致系统开销过高。

Gen 0 heap size(第 2 级堆大小)

显示在第 0 级中可以分配的最大字节数;它不指示在第 0 级中当前分配的字节数。

当自最近回收后的分配超出此大小时发生第 0 级垃圾回收。 第 0 级大小由垃圾回收器进行微调并且可在应用程序执行期间更改。 在第 0 级回收结束时,第 0 级堆的大小是 0 字节。 此计数器显示调用下一个第 0 级垃圾回收的分配的大小(以字节为单位)。

此计数器在垃圾回收结束时(而不是在每次分配时)进行更新。

Gen 0 Promoted Bytes/Sec(从第 1 级提升的字节数/秒)

显示每秒从第 0 级提升到第 1 级的字节数。 内存在从垃圾回收保留下来后被提升。 此计数器是每秒创建的在相当长时间保留下来的对象的指示符。

此计数器显示在最后两个样本(以取样间隔持续时间来划分)中观察到的值之间的差异。

Gen 1 heap size(第 2 级堆大小)

显示第 1 级中的当前字节数;此计数器不显示第 1 级的最大大小。 不直接在此级中分配对象;这些对象是从以前的第 0 级垃圾回收提升的。 此计数器在垃圾回收结束时(而不是在每次分配时)进行更新。

Gen 1 Promoted Bytes/Sec(从第 1 级提升的字节数/秒)

显示每秒从第 1 级提升到第 2 级的字节数。 仅由于等待终止而被提升的对象不包含在此计数器中。

内存在从垃圾回收保留下来后被提升。 不会从第 2 级进行任何提升,因为它是最旧的一级。 此计数器是每秒创建的非常长时间保留下来的对象的指示符。

此计数器显示在最后两个样本(以取样间隔持续时间来划分)中观察到的值之间的差异。

Gen 2 heap size(第 2 级堆大小)

显示第 2 级中的当前字节数。 不直接在此级中分配对象;这些对象是在以前的第 1 级垃圾回收期间从第 1 级提升的。 此计数器在垃圾回收结束时(而不是在每次分配时)进行更新。

Large Object Heap size(大对象堆大小)

显示大对象堆的当前大小(以字节为单位)。 垃圾回收器将大于 20 KB 的对象视作大对象并且直接在特殊堆中分配大对象;它们不是通过这些级别提升的。 此计数器在垃圾回收结束时(而不是在每次分配时)进行更新。

Promoted Finalization-Memory from Gen 0(从第 1 级提升的完成内存)

显示只因等待完成而从第 0 级提升到第 1 级的内存的字节数。 此计数器不是累积计数器;它显示在最后一次垃圾回收结束时观察到的值。

Promoted Finalization-Memory from Gen 1(从第 1 级提升的完成内存)

显示只因等待完成而从第 1 级提升到第 2 级的内存的字节数。 此计数器不是累积计数器;它显示在最后一次垃圾回收结束时观察到的值。 如果最后一次垃圾回收就是第 0 级回收,此计数器则重置为 0。

Promoted Memory from Gen 0(从第 1 级提升的内存)

显示在垃圾回收后保留下来并且从第 0 级提升到第 1 级的内存的字节数。 仅由于等待终止而被提升的对象不包含在此计数器中。 此计数器不是累积计数器;它显示在最后一次垃圾回收结束时观察到的值。

Promoted Memory from Gen 1(从第 1 级提升的内存)

显示在垃圾回收后保留下来并且从第 1 级提升到第 2 级的内存的字节数。 仅由于等待终止而被提升的对象不包含在此计数器中。 此计数器不是累积计数器;它显示在最后一次垃圾回收结束时观察到的值。 如果最后一次垃圾回收就是第 0 级回收,此计数器则重置为 0。

请参见

参考

运行时分析

概念

自动内存管理

其他资源

.NET Framework 中的性能计数器