说我有以下类:了解大对象堆和DumpHeap
Class A
{
B b;
C c;
D d;
}
首先,我分配:
var b1 = new B();
var c1 = new C();
var d1 = new D();
每个b1, c1, d1
小于85K,使他们获得分配上小物件堆。 后来我做:
var a1 = new A { b = b1, c = c1, d = d1 };
问题1:当我做!DumpHeap -stat
确实的A
内存使用包括由它的成员变量占用的内存?如果不是,它实际上包含了什么?
编辑:在这篇文章中找到了这个问题的答案:http://blogs.msdn.com/b/tess/archive/2005/11/25/dumpheap-stat-explained-debugging-net-leaks.aspx。这是有道理的,内存使用A
不包括内存占用b1, c1, d1
。它包括存储b1, c1, d1
引用本身所需的内存。
问题2:a1
是否在大对象堆上分配(假定大小为b1 + c1 + d1
> 85K)?为什么?参考文献b1, c1, d1
指向小物体堆上的物体。那么为什么a1
坐在蕙?
问题3:让我们翻转它。说b1
的大小是超过85K,所以它分配在LOH上。但要存储对b1, c1, d1
的引用,我们只需要几个字节。我是否相信a1
将被分配在小对象堆上?