OOM是互联网各个领域开发者经常遇到的世纪难题,如果说到底的话,其实内存溢出根本原因在于是内存泄露引起的。在日常开发过程中,不经意间就会造成内存泄露,如果持续泄露,导致对象无法被GC回收,那么最终就会导致新对象申请内存时,出现内存溢出。
本文基于LeakCanary 2.9.1源码进行解析。
说到这里,有两个概念,一个内存泄露,一个内存溢出,我们有必要做一下名词解释:
内存泄漏(Memory Leak):是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
内存溢出(out of memory):是指程序在申请内存时,没有足够的内存空间供其使用,从而出现OOM。
内存泄露不一定会引发程序崩溃,但是内存溢出一定会!
这时就引入一个问题,实际代码中,哪些情况会导致内存泄露呢?这里举一下例子: