如果假设一个对象实现了 Finalize 方法,但它内部引用了应用程序的一个活动的静态对象(糟糕的设计!但很有可能)。
现在,当 GC 启动并通过将对象放入终结队列中来终结对象,然后将其移动到 FReachable 队列中,它将调用其 finalize 方法。
但是哇!它发现它引用了一个活动对象,因此它不允许 GC 回收该对象占用的内存并再次标记该对象为活动对象。僵尸对象!
此时这个对象驻留在哪里?
- 仍然处于脆弱状态?
- 留在完成队列中?
- 以不确定的状态保留在托管堆上(从易碎队列和终结队列中删除)?
另外,对于此类对象, ReRegisterForFinalize() 的最佳位置是什么?