【发布时间】:2011-07-09 11:40:41
【问题描述】:
如果假设一个对象实现了 Finalize 方法,但它内部引用了应用程序的一个活动的静态对象(糟糕的设计!但很有可能)。
现在,当 GC 启动并通过将对象放入终结队列来终结对象,然后将其移动到 FReachable 队列时,它将调用其终结方法。
但是哇!它发现它引用了一个活动对象,因此它不允许 GC 回收该对象占用的内存并再次标记该对象为活动对象。一个僵尸对象!
此时此对象驻留在何处?
- 仍然处于脆弱状态?
- 仍在完成队列中?
- 以不确定的状态保留在托管堆上(已从 freachable 和 finalization 队列中删除)?
对于此类对象,ReRegisterForFinalize() 的最佳位置是什么?
【问题讨论】:
标签: .net garbage-collection finalization