重学Android之OOM优化

分析工具


OOM发生以后,使用Android Studio 自带的Android Monitor dump出HPROF文件,然后使用SDK中的hprof-conv(位于sdk_root/platform-tools)工具转换为标准的Java堆转储文件格式,这样就可以使用MAT继续分析

Android OOM类型:


  1. 使用static修饰Context变量,Context被Hold住了导致Activity无法销毁
  2. Bitmap没有及时回收,调用recycle()函数并不能立即释放Bitmap,读取Bitmap到内存的时候没有做采样率的设置;
if(bitmap != null && !bitmap.isRecycled()){

// 回收并且置为null

bitmap.recycle();

bitmap = null;

}

System.gc();

  1. 线程数超限,proc/pid/status中记录的线程数超过proc/sys/kernel/threads-max中规定的最大线程数,比如随意创建线程,没有使用线程池来管理
  2. 文件描述符(fd)超限,proc/pid/fd 下文件数目超过proc/pid/limits中的限制,场景如大量的Socket请求或者文件打开操作
  3. Cursor使用问题,使用完之后没有及时关闭
  4. Java堆内存超限,申请的堆内存超过Runtime.getRuntime().maxMemory().

栈内存用来存储局部变量和方法调用,栈内存的线程是私有的&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值