【发布时间】:2015-02-25 18:34:33
【问题描述】:
我对防止长寿命 Java 应用程序中的内存泄漏问题感兴趣。因此,假设我们在某个服务器端应用程序中为每个用户创建一个窗口。我们有专门开发这个窗口的人。这个窗口的开发者在onClose() 做了一些事情,但是对这个窗口的引用仍然存在。这意味着如果该窗口的最终用户通过一些参考将一些 1MB 图像放入该窗口,那么对于 1000 个用户,我们将有 1GB 未释放内存。
在长寿命应用程序中防止这种内存泄漏的常用方法(可能是一些设计模式)是什么?
我正在阅读this article in JavaWorld,我发现它最终解决了与听众内部引用相关的问题。我不明白它与这个问题的联系。
我确实明白我们可以简单地创建一个外部侦听器,一旦它关闭,它就会将 null 放入对该窗口的所有引用中,但是我认为这不是最好的解决方案(例如,想想当有人创建引用时会发生什么并且忘记添加这样的侦听器!)。
【问题讨论】:
-
我不确定在服务器端应用程序上创建窗口需要什么。通常这类问题要么通过确保您控制引用并在侦听器中杀死它们来解决,要么通过使用弱引用来解决。在这种特殊情况下,细节模糊,没有代码,没有更具体的答案。
-
我们应该只依赖存储引用的人来创建侦听器吗?如果是这样,我真的希望有一天有人会开发一种设计模式来处理它。
-
正如我所说,通常您编写 API 以便控制引用。如果没有更多信息,我们无法为您提供帮助。
-
但是如何创建这样的API呢?也许我的观点是错误的,但就我而言 - 必须有一些人们通常用来处理它的设计模式。
标签: java design-patterns model-view-controller memory-leaks