如何相对内存泄漏的理解首先要知道java内存分配机制,以及GC回收机制。
对象存储原理:对于基本数据类型的话都是在栈中存储的,而对于引用数据类型的话是在栈中
存引用堆中存放对象。
GC回收的原理:如果该对象没有在被引用便会被回收,如内存不足的话
优先回收 虚引用--->弱引用--->软引用--->强引用。
一、导致原因
①、当我们查询数据库后没有关闭游标cursor。
②、在进行适配数据的时候如适配器Adapter时,没有对convertView进行复用导致创建很多个对象
③、在对图片进行处理的时候 Bitmap对象不在使用时没有调用recycle()方法进行内存释放。
④、某一个对象被生命周期长的对象引用,如activity被静态集合引用导致activity不能释放。
⑤、处理文件流I/O的时候,没有关闭流也会导致内存泄漏。
二、 内存泄漏的发现和处理
①、Android自带的工具DDMS中的heap工具,去发现是否有内存溢出。
②、LeakCanary进行内存泄漏检测。
③、通过内存分析工具 MAT(Memory Analyzer Tool),找到内存泄露的对象进行处理。