Object.finalize()会被垃圾收集器调用,当垃圾收集器认定这个对象没有被引用时。 但是无法绝对保证这个方法会在最后一个引用删除时即刻调用。 实际会有几毫秒到几分钟的延迟。 所以当一些对象使用的系统资源需要处理时,最好不要通过这个异步的机制来处理它们。

如下代码演示了这个规则:

public class MyClass {

  protected void finalize() {
    releaseSomeResources();     // Non-Compliant
  }

}