Ani*_*ani 1 .net c# asp.net oop garbage-collection
昨天,我们讨论了Gargbage收集.
讨论了使用Classes创建的对象是由垃圾收集器收集的,但是如果使用struct创建它则不能由GC收集它们.
我知道结构使用堆栈,类使用堆.
但是,我猜GC从不收集非托管代码.这是否意味着Structure类型是非托管代码.(我不这么认为).
或者是GC只处理堆而不是堆栈吗?
如果是,那么int数据类型呢.int是struct而不是class.因此,如果我们定义int类型的对象,是不是由GC管理?
如果无法从GC根目录访问它们,GC将收集任何托管对象(以及结构是托管对象).
但如果使用struct创建它,则无法通过GC收集它.
你被告知的是不正确的.如何创建托管对象并不重要 - 如果没有对它的引用,它将最终被收集.
或者这意味着GC只处理Heap而不是Stack?
GC处理对象图 - 如果任何GC根可以访问对象,则不会收集它们,如果不是,则最终会收集它们.堆栈和堆不相关.
因此,如果我们定义int类型的对象,是不是由GC管理?
int
(AKA System.Int32
)是一个管理对象 - 一个结构.如果int
在类中声明一个字段并且该类超出范围,int
则最终将由GC收集该字段.
正如@leppie 评论的那样,在很多情况下,结构将被放置在堆栈上,当堆栈弹出时它们将不再存在 - 在这种情况下,GC不会涉及(并且不需要).
归档时间: |
|
查看次数: |
2194 次 |
最近记录: |