2011-05-04 56 views
3

當我有一個static字段/屬性,其住在我的應用程序池的應用程序池,在那裏它活在記憶的生活嗎?我假設它被提升爲gen2並且在那裏度過了它的日子? (假設其足夠小不進入LOH靜態屬性最終生活在gen2中嗎?

回答

4

靜態屬性住在堆中在分配給爲類型/類別的類型對象的內存空間。它們在加載類型的同時加載。

靜態屬性不能被垃圾收集。類型對象永遠不能被卸載。本書CLR via C#的第4章的

末解釋它。下面是一個小的片段圖:enter image description here

這只是圖的一部分(不能完全複製,因爲版權),並顯示Employee類型的對象與其靜態字段。型對象類似於所有其它對象,並具有一個指向它的類型這恰好是System.Type

+0

謝謝你,我要問的原因是,當我們使用螞蟻內存分析器我們在第二代開創一些靜態字段值。當他們從靜態變爲非靜態並再次運行探查器時,只發現他們不再在gen2中。隨着你的答案我現在不知道是怎麼回事..:S – 2011-05-05 00:06:39

+0

嗯,我也不會感到驚訝看到他們在第二代雖然我知道哎不能被垃圾收集。在一天結束時,如果他們屬於一個根對象,他們不能被垃圾收集,這是gen2所在。 – Aliostad 2011-05-05 00:12:18