持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情
分析一下内存泄漏和内存溢出
内存溢出OOM
内存溢出(Out Of Memory,简称OOM)是指应用系统中你使用的内存大于已经申请的内存,导致 程序运行不了。比如你申请的内存只能装4个果子,你却放了5个果子。 当内存严重不足时,内核有两种选择
- 直接报panic
- kill掉部分进程、释放一些内存
内存泄漏
内存泄漏(Memory Leak)是指程序中申请内存未释放或无法释放,造成系统内存的浪费,会导致程序运行速度减慢甚至系统崩溃等严重后果
常见的几个内存泄漏
- 常发式内存泄漏: 发生内存泄漏的代码被多次执行。每次被执行都会发生一次内存泄漏
- 偶发性内存泄漏: 发生内存泄漏的代码只有在某些特定环境或操作过程中才会发生,但是常发和偶发是相对的。特定环境发生改变,偶发性也会变成常发的,这时就比较考验测试环境和测试内存泄漏的测试方法
- 一次性内存泄漏,发生内存泄漏的代码只被执行一次,或者由于算法上的缺陷,导致总有一块发生内存泄漏
- 隐式内存泄漏:程序本身并有导致内存泄漏的bug,但是程序会不听的申请内存,而这个程序可能运行的时间超机场,几周甚至几个月,最终会导致内存消耗完。
内存泄漏可以使用工具分析、GC分析、代码基准测试等方法检测出泄漏位置,然后解决