c# - 是真的-垃圾收集器不会收集结构类型的对象

标签 c# asp.net .net oop garbage-collection

昨天,我们讨论了垃圾回收问题。

讨论了使用垃圾收集器收集使用类创建的对象,但是如果使用struct创建对象,则无法使用GC收集对象

我知道结构使用堆栈,而类使用堆。

但是,我猜GC永远不会只收集非托管代码。这是否意味着Structure类型是非托管代码。 (我不这么认为)。

还是GC仅处理堆而不是堆栈?

如果是,那么int数据类型呢? int是struct而不是class。因此,如果我们定义了int类型的对象,那么它不是由GC管理的吗?

最佳答案

如果无法从GC根目录访问它们,则GC将收集所有托管对象(而结构是托管对象)。


  但如果使用struct创建,则无法被GC收集。


被告知的内容不正确。托管对象的创建方式无关紧要-如果不再有对其的引用,那么它将最终被收集。


  还是这意味着GC仅负责堆而不负责堆栈?


GC会处理对象图-如果任何GC根都可以访问对象,则不会收集它们,否则,将最终被收集。堆栈和堆无关。


  因此,如果我们定义了int类型的对象,那么它不是由GC管理的吗?


int(又称System.Int32)是一个托管对象-一种结构。例如,如果在类中声明int字段并且该类超出范围,则int最终将由GC收集。



作为@leppie commented,在许多情况下,结构将放置在堆栈上,并且当弹出堆栈时,它们将不再存在-在这种情况下,GC不涉及(并且不需要) 。

关于c# - 是真的-垃圾收集器不会收集结构类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699740/

相关文章:

c# - 从不同的方法访问数据表

asp.net - 搜索引擎优化和每个 html 页面的多个子域

c# - 如何在C#中实现单例?

c# - 多线程与datagridview

c# - 如何格式化 DateTime 变量以获取月份,然后将值放入 C# 中的字符串? [VS2005]

c# - 无法通过单击按钮发送电子邮件。 ASP.NET 和 C#

c# - 用于检查给定密码是否至少包含一个数字和一个字母的正则表达式?

javascript - 服务器端 C# 方法不是从 ajax 调用 - asp.net

c# - 找不到类型或命名空间 'frombody'

.NET CORE 身份主键