本帖最后由 范龙波 于 2013-9-1 13:55 编辑
先理解什么是内存泄露:
一个不再被程序使用的对象或变量一直占据内存
什么情况下会出现内存泄露:
长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收
eg: 一个对象obj 存入到一个全局map对象中 ,一直不去使用这个obj,那么obj一直被缓存引用,但却不再被使用
如何检查java中的内存泄露
一定要让程序将各种分支情况都完整执行到程序结束,然后看某个对象是否被使用过,如果没有,则才能判定这个对象属于内存泄露。
在补充一点
内存泄露的两个条件:无用,无法回收
static ,被它修饰的成员直到程序退出它才灭亡,所以它引用的对象很有可以发生内存泄露
还有另一种情况,当元素储入到了HashSet中,一旦修改成员属性,就有可能发生. 原因:集合所持有的hashcode找不到目标对象
|