Android 一篇讲完Crash治理之OOM及内存检测工具

应用为什么崩溃Crash?

性能优化第一篇中的Crash治理说过:“出现Crash应用闪退和崩溃一般有三个原因。

ANR(程序无响应);

Exception(异常);

LMK(低内存杀死机制);

程序停止运行时,会用Throwable类抛出相关信息,其中主要有两类,即error和exception。error是程序无法进行拦截和处理的,如LMK也属于虚拟机抛出的错误。因此只能是防范。


LMK(Low Memory Killer )低内存杀死机制。

由于Android应用的沙箱机制,每个应用程序都运行在一个独立的进程中,各自拥有独立的Dalvik虚拟机实例,系统默认分配给虚拟机的内存是有限度的,当系统内存太低依然会触发LMK机制,即出现闪退、崩溃现象。

heap size限制:即Android默认为每个应用进程分配的最大内存,这个限制在不同的Android版本和设备上可能会有所不同。在较新的Android版本中,默认的heap size限制通常为:应用进程最多可以分配的内存为系统可用内存的一半。

也可以通过在配置清单中application设置属性android:largeHeap=”true”可以突破一定限制。


OOM(OutOfMemoryError)内存溢出错误。

事实上,OOM发生Crash的情况,它并不是导致问题的根本原因,只是一种表象。换句话说,它只是压死骆驼的最后一根稻草。真正导致Crash的有以下原因:

  1. 内存泄漏:当应用程序中的对象不再使用时,没有正确释放它们所占用的内存,导致内存泄漏。这可能是由于未及时解除对对象的引用、长时间持有大量对象或者循环引用等原因导致。

  2. 大图像或大数据处理:在Android开发中,处理大图像或大数据时需要占用大量内存。如果没有正确处理这些数据,可能会导致内存溢出。

  3. 内存抖动:频繁创建对象会导致内存分配和垃圾回收的开销增加,从而增加了内存溢出的风险。尽量避免在循环或频繁调用的代码块中创建大量临时对象。

  4. 图片缓存不当:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾阳Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值