澄清Object类中的finalize()方法

时间:2014-04-29 08:44:35

标签: java

如果有人能够在Object类的finalize()方法的javadoc中正确澄清2点,那么它会有所帮助:

1. It is guaranteed, however, that the thread that invokes finalize will not be holding any user-visible synchronization locks when finalize is invoked.

用户可见'有什么意义?同步?除了'用户可见'?

之外还有其他同步吗?
2. The finalize method is never invoked more than once by a Java virtual machine for any given object.

在这种情况下,JVM必须维护所创建的每个对象的唯一标识,以及调用其finalize方法的信息。它最终会不会超出存储的任何区域?

3 个答案:

答案 0 :(得分:2)

  

用户可见'有什么意义?同步?

锁定您可以从Java代码中获取。

  

除了用户可见'?

之外还有其他同步吗?

是的,JVM内部有锁以供其使用。

  

JVM必须维护所创建的每个对象的唯一标识,以及调用其finalize方法的信息。

对象是否已完成存储在标题中。对象没有全局ID。它唯一独特的是对象本身的引用。

  

它最终会不会超出存储的任何区域?

创建对象时会分配此空间。

了解更多信息Object resurrection in Java

答案 1 :(得分:1)

我想(!)第二点是通过在调用finalize()后删除该对象来实现的。这样就不需要存储了。

答案 2 :(得分:1)

  

用户可见'有什么意义?同步?除了'用户可见'?

之外还有其他同步吗?

我想到"用户可见的同步"作为任何锁定或同步代码,可以通过分析源编译器看到的代码找到。 JVM实际上可能在内部使用许多其他锁和同步原语,这对开发人员来说不一定是一个问题。

  

JVM必须维护所创建的每个对象的唯一标识,以及调用其finalize方法的信息。它最终会不会超出存储的任何区域?

否 - 这是因为一旦JVM调用finalize() - 最终对象将是gc' d。

相关问题