面试官问.Net对象赋值为null,就会被GC回收吗?

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

本文讨论了将对象赋值为null后是否能被GC回收的问题。文章指出,被GC回收的条件是对象不再存活,但如果对象是根对象,则不能被回收。因为null被赋值给了默认构造函数的指针,而不是实例指针。因此,正确的回答是这个对象不能被回收。

🎯

关键要点

  • 对象赋值为null后是否能被GC回收是一个面试问题。
  • 被GC回收的条件是对象不再存活,但根对象不能被回收。
  • 示例代码中,pm对象是局部引用对象,因此不会被垃圾回收。
  • GC.SuppressFinalize不会运行pm对象的析构函数,赋值为null后仍然不会被回收。
  • new Program时,实际上进行了两次入栈,pm对象指针仍然存储在栈中。
  • GC在回收时会遍历栈,发现pm对象仍然存活,因此不会被回收。
  • 正确回答是pm对象不能被回收,因为它是根对象,赋值为null也无效。
➡️

继续阅读