也许最典型的例子是错误地完成JDBC关闭并且没有正确处理可能的异常.我很好奇看到你见过的其他例子 - 最好是与web应用程序相关.
那么,Java中是否存在任何常见的泄漏模式?
根据我的经验,两个关键的"有效泄漏"模式是:
随着时间的推移逐渐增长的静力学和单身人士.这可能包括缓存,实现和使用不良的连接池,"自启动以来我们见过的每个用户"的字典等
从长寿命对象到旨在短命的对象的引用.在C#中,这可能发生在事件中,并且等效的观察者模式可以在Java中产生相同的效果.基本上,如果你要求一个物体(观察者)观察另一个物体(物体),那么你通常会得到一个从源头到观察者的参考物.这可能最终成为唯一的"实时"参考,但它将与源头一样长.
如果您继续动态生成新代码,Permgen会泄漏.我在这里比较潇洒,但我很确定我遇到了这样的问题.这可能部分归因于JRE错误已被修复 - 它已经太久了,因为它确实让我记得.
保持状态的单元测试可能比您预期的更长,因为JUnit将保留在测试用例实例上.我再也记不起细节了,但有时这使得在拆解中明确的"变量归零"变得值得,这看起来不合时宜.
我不能说我经常发现内存泄漏是Java(或.NET)中的一个问题.
我不会说它很常见 - 在Java中泄漏是非常罕见的 - 但是由于保留了对不使用外部实例的非静态内部类的引用,我看到了泄漏,但无论如何都保留了对它的引用.