說我有以下類:瞭解大對象堆和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
將被分配在小對象堆上?