内存溢出和内存泄漏
内存溢出(Out Of Memory)
概念
内存溢出指的是:程序在运行过程中需要的内存超过了系统或虚拟机能够提供的上限,导致程序无法继续运行,通常会直接报错或崩溃。
常见原因
一次性加载过多数据(如把超大文件全部读入内存)
创建了大量对象,但内存本身就是不够的
内存参数配置过小(如 JVM 堆内存限制过低)
算法设计不合理,短时间内占用大量内存
特点
问题暴露明显:通常会立即抛出错误
发生迅速:可能在某个操作瞬间就触发
不一定是 Bug:也可能是内存配置不足
示例理解
就像一个只能装 10 升水的桶,你一次性往里倒 15 升水,桶立刻装不下。
内存泄漏(Memory Leak)
概念
内存泄漏指的是:程序中某些已经不再使用的内存,仍然被引用,导致无法被释放,内存占用不断增加。
常见原因
对象使用完后仍被持有引用(如静态集合)
监听器、回调函数未正确移除
缓存设计不当,没有清理机制
循环中不断创建对象并保存引用
特点
问题隐蔽:程序一开始运行正常
逐渐恶化:内存占用慢慢升高
最终可能引发内存溢出
示例理解
就像桶里有一些旧水已经没用了,但你一直不倒掉,新水不断加进来,最终桶还是会满。
三、两者的关系与区别
关系总结:
内存泄漏如果长期存在,最终很可能导致内存溢出,但内存溢出不一定是由内存泄漏引起的。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 RenewBlog
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果