如果有人能够在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方法的信息。它最终会不会超出存储的任何区域?
答案 0 :(得分:2)
用户可见'有什么意义?同步?
锁定您可以从Java代码中获取。
除了用户可见'?
之外还有其他同步吗?
是的,JVM内部有锁以供其使用。
JVM必须维护所创建的每个对象的唯一标识,以及调用其finalize方法的信息。
对象是否已完成存储在标题中。对象没有全局ID。它唯一独特的是对象本身的引用。
它最终会不会超出存储的任何区域?
创建对象时会分配此空间。
答案 1 :(得分:1)
我想(!)第二点是通过在调用finalize()
后删除该对象来实现的。这样就不需要存储了。
答案 2 :(得分:1)
用户可见'有什么意义?同步?除了'用户可见'?
之外还有其他同步吗?
我想到"用户可见的同步"作为任何锁定或同步代码,可以通过分析源编译器看到的代码找到。 JVM实际上可能在内部使用许多其他锁和同步原语,这对开发人员来说不一定是一个问题。
JVM必须维护所创建的每个对象的唯一标识,以及调用其finalize方法的信息。它最终会不会超出存储的任何区域?
否 - 这是因为一旦JVM调用finalize()
- 最终对象将是gc' d。