.NET CLR 内存“所有堆中的字节数”远低于“Gen 0 堆大小”
Posted
技术标签:
【中文标题】.NET CLR 内存“所有堆中的字节数”远低于“Gen 0 堆大小”【英文标题】:.NET CLR Memory "Bytes in all heaps" is much lower than "Gen 0 heap size" 【发布时间】:2012-04-19 21:05:02 【问题描述】:我正在查看 ASP.NET 4 应用程序(工作流服务)的性能计数器
.NET CLR Memory -- # Bytes in all Heaps : 44,420,488
.NET CLR Memory -- Gen 0 heap size : 311,665,568
.NET CLR Memory -- Gen 1 heap size : 17,723,080
.NET CLR Memory -- Gen 2 heap size : 25,956,920
.NET CLR Memory -- Large Object Heap size : 740,488
关于“# Bytes in all Heaps”计数器的说明
这个计数器是其他四个计数器的总和;第 0 代堆大小;第 1 代堆大小; Gen 2 堆大小和大对象堆大小。此计数器指示 GC 堆上以字节为单位分配的当前内存。
请注意,它说的是“四个其他计数器的总和”,而不仅仅是“分配在四个其他堆上的字节总和”,这是有道理的,因为在 Gen 0 垃圾回收后 Gen 0 堆中有 0 个字节。
我注意到在我的情况下,所有堆中的#Bytes 恰好是 Gen 1 + Gen 2 + Large Object Heap。这是一个错误吗?还是我错过了阅读数字?
Windows 7 企业版,性能监视器 6.1.7601
【问题讨论】:
【参考方案1】:根据this,所有堆 = Gen 1 + Gen 2 + 大对象堆 (没有第 0 代)
【讨论】:
@THX-1138 另请注意,“Gen 0 堆大小”不是 Gen 0 堆的当前“占用”,而是当前 最大 大小 - 它始终是预分配的,无论实际有多少对象。所以性能计数器并不是那么有用:)以上是关于.NET CLR 内存“所有堆中的字节数”远低于“Gen 0 堆大小”的主要内容,如果未能解决你的问题,请参考以下文章
如何对正在运行的 ASP.NET 应用程序进行非侵入式分析?