记一次安卓“Low on memory“崩溃问题

2024-05-26 03:28

本文主要是介绍记一次安卓“Low on memory“崩溃问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

最近再调人脸识别算法相关demo,发现调试期间总是偶发性崩溃,捕获不到异常的那种,看日志发现原因是Low on memory,一开始还疑惑 App内存不够应该是OOM啊,怎么会出现这种问题,百思不得其解,直到我打开了 Android studio中的Profiler

开始分析问题

两分零六开始内存直线上升,直到程序被强杀
在这里插入图片描述

在这里插入图片描述

惊呆了烙铁,这TM的不就是内存泄漏吗,于是开始记录内存快照

在这里插入图片描述
emm… Leaks个数为0,没有泄露,啧啧,不用管它,看下面一眼就看到Bitmap 占用了天文数字的Native内存,这明显是Bitmap 没有被回收而一直被强引用啊!

知道问题原因解决起来就简单了,我的程序中因为要不停的向人脸识别算法喂Bitmap,正常的流程是算法处理结束就会及时回收它,巧的是当Bitmap没有人脸的时候中间一段代码会报错,导致算法不能继续执行下去,就导致了这个Bitmap已经通过JNI传进了Native层而无法正常回收,因为算法处理过程是在子线程中,所以即使子线程崩溃,在你不使用try catch捕获异常的情况下,你就无法感知到。

乌鱼子,把相关代码异常处理下就正常了
在这里插入图片描述

最后

不要好奇为什么这么频繁GC,因为不GC我的程序才不正常。最后提醒一下,大家记得处理好子线程异常情况呀,拜拜ヾ(•ω•`)o

这篇关于记一次安卓“Low on memory“崩溃问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003404

相关文章

CC2531 USB Dongle安装失败问题

1、CC2530 Development Kit的开发板套件,在套件里,有个CC2531 USB Dongle,将这个USB Dongle插到电脑上的时候,提示无法识别,参照相关文档看的时候,把需要安装的相关驱动和Packet Sniffer都安装完成了W10 64系统也还是无法识别 2、网上也有很多种方法看了下有些比较复杂,其实最简单的方法是安装驱动精灵 3、安装完成后成功识别

VxWorks--FTP传输可执行文件运行错误问题

1、通过Tornado制作的.c工程代码文件最后编译出来为.o可执行文件,在通过FTP传输可执行文件到vxworks系统目录文件夹里面,通过执行ld命令即报错,经过报错的err去搜索了很多帖子也没有解决以下问题 2、查询了很多关于vxworks系统的文章知识点,最终发现的错误点在ftp传输模式上,下面大概介绍下ftp传输模式的区别:    1).FTP在传送文件时分为

【动态规划】| 详解路径问题之地下城游戏 力扣174 (困难题)

🎗️ 主页:小夜时雨 🎗️专栏:动态规划 🎗️如何活着,是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/minimum-path-sum/description/ 建议先看一下前面的几道题加深理解一下, 本道题是一个反方向思考 不同路径1 :https://leetcode

开发中遇到的线程不安全问题小结

1. SimpleDateFormat 是线程不安全的,推荐使用如下: 1)声明SimpleDateFormat变量时 加synchronized修饰。 2)使用DateUtils 工具类 3)使用ThreadLocal,如下: private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {

3X+3问题,角谷猜想的姐妹问题

3X+3问题是角谷猜想(3X+1)的延伸,可以说是孪生问题。 对于任何奇数x,乘以3再加3,再析出偶数,即,除以(m=1,2,3,...。),,经过一定数次迭代,最后一定回到3.。 ......(1), x表示奇数,其中 是指把全部偶数析出。 最后一定回到3。 例如:=1, 代入公式(1),。. =3,代入公式(1) ,。=5,代入公式(1), . =7,3×7

SpringCloud Alibaba Nacos持久化到Mysql8.x的问题解决笔记

今天在学习Nacos持久化时,发现一直报错,原因是Nacos源码里mysql-connector-java依赖版本是5.x版本,不支持Mysql8.x版本,所以我们要将Nacos源码下载下来修改后重新打包使用。 我本地使用的是1.1.4版本。 官网下载地址:https://github.com/alibaba/nacos/releases/tag/1.1.4   下载源码文件后并解压出

CAS原理分析及ABA问题解决方法

转自:https://blog.csdn.net/zhangqiang180/article/details/107274126 什么是CAS CAS即Compare And Swap的缩写,翻译成中文就是比较并交换,其作用是让CPU比较内存中某个值是否和预期的值相同,如果相同则将这个值更新为新值,不相同则不做更新,也就是CAS是原子性的操作(读和写两者同时具有原子性),其实现方式是通过借助C/

FastJson与JackSon 的碰撞。服务发送方与服务接收方字段不一致问题

情景再现 对接文档人家要求字段为 于是乎 咱就在服务的发送方定义参数字段为 服务接收方接收的类型为 later。。。。。 服务接收方接收到的参数字段 就不变成了fOrgId。跟外部系统对接就提示参数错误 原因 :lombok 在做set get的时候自动 无论你字段的首字母是大写的还是小写的全都 转为小写的,也就是经典的驼峰式。 解决方法: 至于为什么加两个注解,这两个注解的区别,以

如何从tensorboardX中的参数histogram看网络训练问题?

最近遇到一个问题,同样的一个网络,稍微改了一丢丢地方,居然会导致结果差异天差地别,看loss函数可以大概知道model1有问题。但是其实也可以从另一个角度,比如参数的分布来看,这里就介绍一下我的做法。(pytorch 用tensorboardX, tensorflow用tensorboard) 一共四个小实验 实验1,对比model 1和model 2的参数histogram 示例代码: 服

vmmare虚拟机没有被分配ip地址问题;NAT模式下一直变化问题

打开任务管理器–>服务–>找到与VM和server相关的服务 发现NAT和DHCP服务被关闭了 尝试启动,报错 尝试一 虚拟网络编辑器点击还原默认设置 尝试二 可以了 ip变化 更改租用时长