|
|
此文章由 求大神解惑 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 求大神解惑 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 求大神解惑 于 2014-8-13 21:33 编辑
我知道 有value-type objects (ubyte, short, int, long, float, double, decimal, bool, char, struct, enum等) 和 reference-type objects (string, object, class, delegate, array等)
当生成一个 int 时, 东西是放在stack上,当把这个int 赋给 一个 type 或 local field时,是把stack上的value赋过去的,这点明白
但是当生成一个 class或array时, 东西是放在heap上,同时生成一个reference(指向这个heap-based object的reference) 放在stack上,当把这个class或array的instance的里面的东西 赋给 type 或 local field时,是把stack上的value就是reference本身给赋过去的,而不是实际heap上的instance,这点也明白
以上生成了 两个东西,一个 a value type 和 一个 a reference type object, 并且各自有了一个type或local field 指向它们
当GC过来的时候(上面两者还都在):
1. value type instance 会不会受GC影响?完全没影响?
2. reference type object 肯定受影响了,但此时
这object还有一个variable在reference它,不能被GC掉,照理它会被作为Gen n+1 (n<2) object 被移动到相应heap区域里去,我能不能不用unsafe code强制不让它被GC移动?
如果当GC过来的时候, 唯一的variable已经out of scope了,
也就是这object 已经没有任何东西reference它,也没写destructor 或finalize代码, 照理不会被GC送去finalize queue而会直接被GC清理掉。我能不能强制不让它被立刻废掉,而用个timer让他在eg. 2小时后的第一次GC才被废掉?
求教大神
|
|