在查看JAX_WS端点的要求时,我遇到了这个,
JAX-WS endpoint implementation class must not implement `finalize()` method.
但我没有找到更好的答案来解释这一点。为什么我们不应该实现finalize()方法,如果我们实现会发生什么?
有人可以点亮这个吗?
答案 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,了解有关最终实施的更多意见。