内存溢出 out of memory, 是指程序在申请内存时, 没有足够的内存空间供其使用, 出现 out of memory;
内存泄露 memory leak, 是指程序在申请内存后, 无法释放已申请的内存空间, 一次内存泄露危害可以忽略, 但内存泄露堆积后果很严重, 无论多少内存, 迟早会被占光.
memory leak 会最终会导致 out of memory!
内存泄漏从用户的角度来考虑的话根本感觉不到, 但是从程序设计的角度我们必须考虑这个问题, 因为内存泄漏的堆积最终会消耗系统所有的内存.
内存泄漏的原因:
内存泄露是指无用对象 (不再使用的对象) 持续占有内存或无用对象的内存得不到及时释放, 从而造成的内存空间的浪费称为内存泄露, 通常是长生命周期的对象持有短生命周期对象的引用就会导致内存泄漏.
通常有以下几种内存泄漏的场景.
1. 静态集合类引起内存泄露:
2. 集合里面对象的属性被修改以后, remove 方法不起作用
3. 数据库, sockect,io 等连接没有及时关闭的也会造成内存泄漏, 所以需要我们显式的 close.
4. 单例模式中, 如果单例对象持有外部对象的引用的话, 也会导致外部对象不能被回收.
5. 监听器(未解决)
参考: https://www.cnblogs.com/panxuejun/p/5883044.html
https://www.jb51.net/article/92311.htm
来源: http://www.bubuko.com/infodetail-2986749.html