A a = new A();
a.Name = null;
垃圾回收器会释放属性的空间吗?
此外:
B b = new B();
b = null;
垃圾收集器会释放对象的空间吗?
在您的第一个示例中,a.name
只占用保存对a.name
类型的对象的引用所需的空间。 它是否包含null
或引用都无关紧要。 只有当收集整个对象a
时,才会收集该空间。 当您将a.name
设置为null
时,可能会收集a.name
所指向的对象。
在第二个示例中,b
可能会被收集,也可能不会被收集。
在任何情况下,您都不能仅仅通过添加null
来触发垃圾收集,因为收集可以在运行库认为合适的任何时候发生。 您可能需要阅读文档中的详细信息。
第一种情况不清楚名称
是什么。 如果它是字符串
,则是,将其设置为null将最终释放内存。 如果它是一个类,那么它可能是,也可能不是,但这在您的第二个问题中已经涵盖了。
所以在第二种情况下,如果这是应用程序的所有代码,内存最终将被释放。 但是,一个对象可以对某个事件有多个引用或订阅,这可能会阻止它被垃圾收集,因此仅仅将初始引用设置为null
并不是在每种情况下都允许收集。