Sri*_*har 5 web-services jax-ws
在浏览JAX_WS端点的要求时,我遇到了这个,
JAX-WS endpoint implementation class must not implement `finalize()` method.
Run Code Online (Sandbox Code Playgroud)
但我没有找到更好的答案解释这一点.为什么我们不应该实现finalize()方法,如果我们实现了会发生什么?
有人可以点亮这个吗?
正如您所解释的,JAX-WS 端点不应实现 Finalize 方法(检查this)。
为什么?
JVM 不保证 Finalize 方法的执行。理论上来说,finalize方法会在对象被垃圾回收时被调用,但是什么时候会被回收呢?没有办法知道:有时它会立即被收集,也许它会一直存在直到 JVM 停止(这意味着永远不会)。实际上,这与GC算法有关,每个JVM都有自己的实现,并且每个实现都非常不同,因为没有对该算法的行为进行规范。
但真正的问题是一些java程序员不知道这一点,他们使用finalize方法作为“析构函数”。示例:您有一个在其构造函数中创建 JDBC 连接的类。因此,为了让它变得更好,您决定在“析构函数”(最终确定)中释放此连接。结果:你不知道连接什么时候会关闭,或者可能永远不会关闭!
这就是为什么实现 Finalize 方法对于任何 java 类来说都被认为是一种不好的做法,并且在某些框架中被禁止以避免误解(即 JAX-WS)。
恕我直言,这个方法应该从Object
API 中删除,但它仍然存在......也许是为了向后兼容或我无法想象的有用用法;-)
检查此内容以阅读有关最终实施的更多意见。
归档时间: |
|
查看次数: |
1406 次 |
最近记录: |