【发布时间】:2021-04-09 08:09:22
【问题描述】:
我们知道,当一个类型覆盖 Finalize 方法时,它必须在垃圾收集中幸存下来,它会被提升到另一代,这迫使对象的寿命比它应该的长得多。这在内存消耗方面并不理想,因此您应该尽可能避免完成。
但是不是所有类型都隐式派生自Object,Object 确实有一个默认的 Finalize 方法,所以 CLR 应该考虑所有类型都有 Finalize 方法,因此堆上的所有对象都会被提示到新生代,并且比他们应该活得更长?
【问题讨论】:
-
来自the docs:“Object 类没有提供 Finalize 方法的实现,并且垃圾收集器不会标记从 Object 派生的类型以进行终结,除非它们覆盖 Finalize 方法。”