【问题标题】:why nullify instance variables when destroying a stateful EJB?为什么在销毁有状态 EJB 时使实例变量无效?
【发布时间】:2012-05-15 10:51:09
【问题描述】:

在有状态 EJB 上的 @remove 注释示例中,带注释的方法使 bean 的实例变量无效。为什么?销毁 bean 肯定会破坏其内容,即任何变量?

谢谢, 乔恩

【问题讨论】:

    标签: java jakarta-ee ejb javabeans stateful


    【解决方案1】:

    如果使用 ejbRemove(),实例的属性被擦除干净,客户端仍然有实例的引用。客户端仍然可以访问相同的对象。这是不可取的。

    【讨论】:

      【解决方案2】:

      将对象的所有字段设置为null 有两个有用的效果:

      • 它提供了一个硬屏障,防止逻辑错误导致无效对象被重用。应用程序会崩溃,而不是默默地产生不正确的结果。

      • 它通过从对象引用图中删除边来帮助 Java VM 垃圾收集器,从而提高整体性能。

      【讨论】:

      • 将成员引用设置为 null 是unlikely 以帮助垃圾收集器。
      • @McDowell:这取决于如何将字段设置为null。如果它是正常操作过程中的简单分配,那很好而且很有帮助,至少根据我的分析器。如果它需要通过显式遍历复杂结构来复制 GC 的操作,那么这是一个非常糟糕的主意。一般来说,在进行此类微优化之前,应该先分析他们的程序......
      【解决方案3】:

      您可以发布示例源代码吗?或者不要。不需要主动设置null - 当 EJB 被销毁并很快被垃圾收集时,它引用的所有对象(当然前提是没有其他对它们的引用)也将被垃圾收集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        相关资源
        最近更新 更多