当前位置:  开发笔记 > 编程语言 > 正文

常见的Java内存/引用泄漏模式?

如何解决《常见的Java内存/引用泄漏模式?》经验,为你挑选了2个好方法。

也许最典型的例子是错误地完成JDBC关闭并且没有正确处理可能的异常.我很好奇看到你见过的其他例子 - 最好是与web应用程序相关.

那么,Java中是否存在任何常见的泄漏模式?



1> Jon Skeet..:

根据我的经验,两个关键的"有效泄漏"模式是:

随着时间的推移逐渐增长的静力学和单身人士.这可能包括缓存,实现和使用不良的连接池,"自启动以来我们见过的每个用户"的字典等

从长寿命对象到旨在短命的对象的引用.在C#中,这可能发生在事件中,并且等效的观察者模式可以在Java中产生相同的效果.基本上,如果你要求一个物体(观察者)观察另一个物体(物体),那么你通常会得到一个源头观察者的参考物.这可能最终成为唯一的"实时"参考,但它将与源头一样长.

如果您继续动态生成新代码,Permgen会泄漏.我在这里比较潇洒,但我很确定我遇到了这样的问题.这可能部分归因于JRE错误已被修复 - 它已经太久了,因为它确实让我记得.

保持状态的单元测试可能比您预期的更长,因为JUnit将保留在测试用例实例上.我再也记不起细节了,但有时这使得在拆解中明确的"变量归零"变得值得,这看起来不合时宜.

我不能说我经常发现内存泄漏是Java(或.NET)中的一个问题.



2> Pete Kirkham..:

我不会说它很常见 - 在Java中泄漏是非常罕见的 - 但是由于保留了对不使用外部实例的非静态内部类的引用,我看到了泄漏,但无论如何都保留了对它的引用.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有