OOM面试讲解
2019-05-19 本文已影响0人
崽子猪
一、什么是OOM?
程序在申请内存后,被某个对象一直持有.无法释放已申请的内存空间.一次内存泄漏可以忽略,但内存泄漏堆积后果是很严重的.无论你有多少内存,迟早被占光.
二、一些容易混淆的概念
内存溢出/内存抖动/内存泄漏
内存溢出(OOM)
内存抖动:短时间内大量对象被创建会被马上释放瞬间产生的对象会严重占有内存区域
内存泄漏:进程中的某些对象,比如说垃圾对象.它已经没有被其他地方引用到了但是它们却可以直接或间接的引用到其他还没有被回收的对象(gcRoots),所以说导致GC无法产生作用.
三、如何解决OOM?
有关bitmap/其他方法
解决方法(有关bitmap)
图片显示:显示缩略图的时候不要去调用网络请求加载大图
及时释放内存
图片压缩
inBitmap属性
捕获异常
其他解决方法
listview:convertview/lru
避免在onDraw方法里面执行对象的创建
谨慎使用多线程
四、内存泄漏分为哪几类?
常发性内存泄漏/偶发性内存泄漏/一次性内存泄漏/隐式内存泄漏
五、如何检测内存问题?
1. 用Android Studio自带的Android Profitler找到MEMORT这个栏目进行检测.
2. LeakCanay(会找到并修复内存泄漏将OOM崩溃机率降低%94)