非诚勿扰贴——如何修复内存泄露?

夕水溪下 2013-05-29 11:17:49
面试经常被面到这个问题,我觉得应该从这几方面问:

1.内存泄露与内存溢出的区别

2.程序OOM时,如何确定他是内存泄露还是内存溢出

3.确定后分别如何解决

请各位大牛们畅谈。小弟不慎感激。
...全文
113 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
无聊找乐 2013-05-29
  • 打赏
  • 举报
回复
楼上的都说的很详细了。我还能说啥~~!?
xiao315558547 2013-05-29
  • 打赏
  • 举报
回复
这个可以用jprofile6快速查出来,jprofile可以把各个对象的引用数量及引用关系罗列出来,可以根据这个来检查出哪里泄漏了。谢谢 我是求分的 急用
树成 2013-05-29
  • 打赏
  • 举报
回复
- - 这是个经验问题,写程序少的或者没有工作经验的人一般比较模糊。 1、内存泄露是指,程序在运行期间,有一部分内存没有或者无法被回收,而内存溢出是指程序对内存的使用量超出给它的额定使用量。它们之间有一定关系,但是没有必然的关系,内存泄露不一定会内存溢出,而内存溢出也不一定就是内存泄露造成的。 2、OOM时,肯定是内存溢出,因为这个错误就是内存溢出错误,因此只要判断这个溢出是否内存泄露造成的,还是非内存泄露,也许是给定的额定内存不足以满足需求,也可能是程序设计的缺陷,如果是c++,或者C,就要分析内存是否被free掉,而java的话,基本上就是List或者Map,而且通常是静态的才会造成泄露(jni不在此讨论范畴)。 3、如果是内存泄露,查找起来就比较困难了,因为你要仔细思考你的实现,然后想到可能会内存泄露的地方,然后一一排查,还要跟踪代码,如果有测试工具帮助,会很快。如果是单纯的内存溢出,那就比较简单了,因为肯定会有个数据爆发的需求,哪个模块实现的这种需求,针对情况调整就可以了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧