-4

我正在开发一个遭受内存泄漏的 java web start 应用程序。我使用了许多工具并找到了可疑对象。我的应用程序使用了许多对象的克隆方法。现在的问题是如何解决它......当它最后使用时将 null 放入对象不起作用......任何形式的帮助将不胜感激。提前致谢

4

2 回答 2

3

启动VisualVM,它应该可以让你看到周围有什么物体。它是调试内存相关问题的宝贵工具。

于 2012-11-15T09:12:49.200 回答
0

当您有一个长时间运行的进程包含对应该消失的对象的引用时,就会发生内存泄漏。

例如,我发现 Swing 应用程序中的已关闭文档保存在内存中,因为键盘和鼠标侦听器(应用程序的全局)仍然持有对显示它们的面板的引用。

如上所述,JVisualVM 可以通过引用链帮助找到保留对象的根。找到根,切断那里的链接。

如果您的克隆方法保留引用/与原始对象共享对象,则意味着您的克隆编码错误(它们应该进行深度复制,AFAIK)。有关正确的 clone() 编写方法(或使用替代方法,如复制构造函数),请参阅 Effective Java 书。

于 2012-11-15T09:21:00.250 回答