面试官问.Net对象赋值为null,就会被GC回收吗?
💡
原文中文,约1900字,阅读约需5分钟。
📝
内容提要
本文讨论了将对象赋值为null后是否能被GC回收的问题。文章指出,被GC回收的条件是对象不再存活,但如果对象是根对象,则不能被回收。因为null被赋值给了默认构造函数的指针,而不是实例指针。因此,正确的回答是这个对象不能被回收。
🎯
关键要点
- 对象赋值为null后是否能被GC回收是一个面试问题。
- 被GC回收的条件是对象不再存活,但根对象不能被回收。
- 示例代码中,pm对象是局部引用对象,因此不会被垃圾回收。
- GC.SuppressFinalize不会运行pm对象的析构函数,赋值为null后仍然不会被回收。
- new Program时,实际上进行了两次入栈,pm对象指针仍然存储在栈中。
- GC在回收时会遍历栈,发现pm对象仍然存活,因此不会被回收。
- 正确回答是pm对象不能被回收,因为它是根对象,赋值为null也无效。
➡️