JAX-WS端点实现类不能实现`finalize()`方法

时间:2012-07-16 10:24:37

标签: web-services jax-ws

在查看JAX_WS端点的要求时,我遇到了这个,

JAX-WS endpoint implementation class must not implement `finalize()` method.

但我没有找到更好的答案来解释这一点。为什么我们不应该实现finalize()方法,如果我们实现会发生什么?

有人可以点亮这个吗?

1 个答案:

答案 0 :(得分:3)

正如您所解释的,JAX-WS端点不应实现finalize方法(Check this)。

<强>为什么吗

JVM无法保证finalize方法的执行。从理论上讲,当对象被垃圾收集时会调用finalize方法,但是当它被收集时会被调用吗?没有办法知道:有时它会被立即收集,也许它会活着直到JVM停止(这意味着永远不会)。实际上,这与GC算法有关,并且每个JVM都有自己的实现,并且每个JVM都非常不同,因为没有规范此算法的行为。

但真正的问题是,一些java程序员并不知道这一点,他们使用finalize方法作为“析构函数”。示例:您有一个在其构造函数中创建JDBC连接的类。因此,为了使它 nice ,您决定在&#39;析构函数中释放此连接。 (完成)。结果:您不知道何时关闭连接,或者可能永远不会关闭!!!

这就是为什么实现finalize方法被认为是任何java类的坏习惯,并且在某些框架中被禁止避免误解(即JAX-WS)。

恕我直言,这个方法应该从Object API中删除,但它仍然存在......可能是为了向后兼容或我无法想象的有用用法; - )

检查this,了解有关最终实施的更多意见。