【问题标题】:Disapearing Object Instance消失的对象实例
【发布时间】:2011-08-26 14:34:44
【问题描述】:

我开发了一个 web 服务,它使用一个对象实例来完成部分所需的功能。

当我通过使用构造函数创建 web 服务类实例时,该对象被初始化一次。

示例:

公开课 A {
    私有 B bInstance;
    公共A(){
        bInstance = 新 B();
    }
}

不幸的是,几分钟后(可能是 20 到 30 分钟),我的代码开始从该对象返回 NullPointerException。就好像那个对象被垃圾收集或销毁了一样。

这可能是什么原因(除了可能的人为错误)?也许我错过了一些特定于 Web 应用程序的东西

现在我已经开始使用对象 getter 来验证空指针并在需要时重建对象,但这感觉不对

感谢您提供的任何提示

【问题讨论】:

  • 如果这样做,GC 将被严重破坏。不是(有 99% 的把握)。问题一定出在您的代码中。
  • 我知道,我已经搜索代码好几天了,但我没有找到初始化后写入变量的一行。
  • @Katanagashi:创建变量final 只是为了确保。
  • 您是否也有一个设置器,它允许项目的其他部分将该实例设置为空?
  • @Jeremy 会尝试这样做,但首先我必须更改初始化代码才能在“final”变量中执行此操作

标签: java web-applications web-services jakarta-ee


【解决方案1】:

可能的序列化问题

由于内存问题,您的应用程序容器可能正在序列化您的代码,并且反序列化过程未正确创建 B 的实例。

【讨论】:

  • 有道理,有什么方法可以确认吗?
  • 您可以验证 A 和 B 实现了 Serializable。如果他们这样做了,则编写一个使用 ObjectOutputStream 包装 FileOutputStream 进行序列化的小示例类,然后使用 ObjectInputStream 包装 FileInputStream 将其带回并验证它是否按预期工作。
猜你喜欢
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2014-01-29
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多