Android 处理内存泄露的方法

. 内容
本文档包含如下内容:


l 如何确定App存在内存泄露

l 如何定位App的内存泄露位置

l 怎样避免内存泄露

2. 名词解释
App:Application

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)

RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)

PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)

USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

3. Android查看内存的工具
DDMS查看系统内存
在sdk/ android-sdk_eng._linux-x86/tools下,启动ddms,

./ddms

通过ddms的sysInfo,如下图,我们可以看到系统内存目前的分布情况,这是一个饼状图,

从图中看BaiduReader大概占用了12%,10M左右的内存。


使用procrank查看进程内存
procrank 命令可以获得当前系统中各进程的内存使用快照,这里有PSS,USS,VSS,RSS。我们一般观察Uss来反映一个Process的内存使用情况,Uss 的大小代表了只属于本进程正在使用的内存大小,这些内存在此Process被杀掉之后,会被完整的回收掉,

Vss和Rss对查看某一Process自身内存状况没有什么价值,因为他们包含了共享库的内存使用,而往往共享库的资源占用比重是很大的,这样就稀释了对Process自身创建内存波动。

而Pss是按照比例将共享内存分割,某一Process对共享内存的占用情况。

procrank 的代码在 /system/extras/procrank,,在模拟器或者设备上的运行文件位/system/xbin

在adb shell之后,我们运行procrank下图是Help

下图是BaiduReader运行下的所有进程的内存使用列表

从上图我们可以看到,所有的后台守护进程都比基于dalvik的虚拟机进程要小的多,zygote是虚拟机收个进程,由它来负责folk生成其他的虚拟机进程,而刚才PSS中谈到的共享库,其实就是由Zygote加载的,而其他虚拟机进程与Zygote共享这些内存。
Android内存泄露问题:解决Handler引起的内存泄露 在Android中,当一个对象持有对其他对象的引用,并且这些引用没有被正确释放,就会导致内存泄露问题的发生。其中一个常见的内存泄露源是Handler,本文将介绍如何解决由Handler引起的内存泄露问题,并提供相应的源代码示例。在Android开发中,我们应该始终注意在适当的时候移除未处理的消息,以确保对象能够被正确释放,从而避免潜在的内存泄露问题。然而,由于Handler持有对Activity的引用,当Activity被销毁时,Handler可能仍然存在于消息队列中,这就导致了内存泄露。 阅读详情

相关推荐

Zephyr 开发必备技能:一文搞懂 west manifest

本文深入解析Zephyr项目的westmanifest工具与Manifest文件管理,从基础概念到高级应用。文章首先介绍westmanifest作为Zephyr模块化架构的核心工具,负责管理west.yml文件中的模块信息、Git地址及版本控制。随后详细讲解Manifest文件的基本结构、字段含义,以及westmanifest子命令的使用方法,包括查看内容、冻结版本、验证文件等操作。文章还探讨了Manifest的导入继承机制和在团队协作中的版本管理策略,并给出常见问题排查技巧。最后强调Manifest文件作

hemoparrot的专栏 1255

Android安卓自带的 WebView 浏览器内核更新

Android 安卓自带 WebView 浏览器内核更新教程

aken 8万+

Allan方差读图分析IMU误差指标

Allan方差标定IMU参数实测分析

weixin_44927558的博客 3566

安卓手机升级系统webview

今天公司有台android 5.1的的设备,其系统webview版本太低(39.0),给我手动升级了一下webview,顺便总结一下 一、前言 从Android4.4系统开始,Chromium内核取代了Webkit内核,正式地接管了WebView的渲染工作,Chromium在Android上面的实现是Android System WebView,从Android5.0系统开始,W...

qq_41827547的博客 1万+

硬件基础知识-电机知识

步进电机存在空载启动频率,所以步进电机可以低速正常运转,但若高于一定速度时就无法启动,并伴有尖锐的啸叫声;在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数。给电机两根线供电,电机就可以旋转,给正电压,电机正转,给相反电压,电机反转;电压越大,电机转得越快,电压越小,转速也变小。是一种直流电机,有刷电机的定子上安装有固定的主磁极和电刷,转子上安装有电枢绕组和换向器。控制器:使用专用的电子控制器来监测和控制电机的转速、电流和方向。线圈电流方向的交替变化是随电机转动的换相器和电刷来完成的。

weixin_46969363的博客 2294

从点击图标到Activity亮屏:AMS、Zygote、ActivityThread的Binder协作之旅

Launcher通过Context调用 startActivity(),最终会通过 Activity.startActivity() 传递到 ActivityManager.getService(),获取AMS的Binder代理对象(IActivityManager)。这里的 attach() 方法通过Binder调用AMS的 attachApplication(),将新进程的 IApplicationThread 代理对象传递给AMS。这一步的Binder通信,是整个启动流程的关键转折点,值得细细品味。

大模型大数据攻城狮的专栏 1071

Android WebView踩过的坑

目录 坑1:点击网页中的按钮无响应 坑2:WebView加载网页不显示图片 坑3:WebView加载网页中无法播放视频 坑4:WebView打开多个H5页面,返回键无效 坑5:android4.4以后webview默认不保存cookie状态 坑6:WebView 加载https 白屏以及重定向加载 坑7:Webview无法正常唤起系统相册来选择图片 坑8:WebView在可编辑状态...

阿亮的博客 4476

2015年高教社杯全国大学生数学建模竞赛 A 题:《太阳影子定位》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 1357

内存泄露问题分析方法

本文介绍了内存泄露的定位方法,可以帮助Android系统的开发者定位一些常见的内存泄露问题。本文暂时只从工具的角度讲解了如何定位,后面会补充如何从代码的角度去分析和定位,并且加入内存管理的优化方法。

撒哈拉的绿洲 1万+

数据分析案例-车辆二氧化碳排放量数据可视化分析

本实验数据集来源于Kaggle,该数据集捕获了车辆二氧化碳排放量随不同特征变化的详细信息。数据集取自加拿大政府官方开放数据网站。其中包含 7 年期间的数据。总共有 7385 行和 12 列。各列变量含义解释如下:Make:车辆的品牌或制造商。Model:车辆的具体车型名称。Vehicle Class:车辆的分类,如紧凑型、SUV等。Engine Size(L):车辆发动机的尺寸,以升为单位。Cylinders:车辆发动机的气缸数。

m0_64336780的博客 1万+

Cadence OrCAD Capture软件启动过程卡死且无法恢复的解决方法

如下图所示Cadence OrCAD Capture软件在启动后出现卡死的现象,且等待后无法自动恢复,需要强行关闭,再次启动依然卡死。

fydar的博客 4042

5个Android常见内存泄露及处理方法

http://www.devstore.cn/essay/essayInfo/4187.html?utm_source=tuicool&utm_medium=referral mark一下

网鱼的栈 2378

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android开发——避免内存泄露

Android开发——避免内存泄露 本文翻译自Avoiding memory leak——Post by Romain Guy 著作权归原作者所有。转载请注明出处,由JohnTsai翻译 Android应用被分配的堆的大小限制为16MB。这对于手机来说已经很多了,但对于一些开发者想获得的来说仍旧不够。即使你没有计划使用所有的这些内存。你应该尽可能的少用以避免其他应用在运行时因为内存不足...

didingyun4257的博客 229

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Android】Handler造成内存泄露分析

Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。也就是说,一个对象不被任何引用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象中只包含互相的引用,而没有来自它们外部的引用(例如有两个对象A和B互相持有引用,但没有任何外部对象持有指向A或B的引用),这仍然属于不可到达,同样会被GC回收。 Android中使用Handler造成内存泄露的原因 Handler mHandler = new Handl

sinat_36955332的博客 181

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

android内存泄露总结

解决内存溢出方法: 1.强引用导致内存不释放。     相关描述:1.强引用(正常赋值的)、软引用(高速缓存、可被回收)、弱引用(gc的时候回收,不影响原对象垃圾收集)     解决方法:找到强引用不释放的地方改成弱引用,leakcanary分析 2.WebView是否会导致内存溢出 会,见下面参考文章,WebView内存泄露 3.内存分析工具ddms、mat分析 (一)dd

452

Android面试题之——内存泄露

一、内存泄露的定义:     内存泄露是指不再使用的内存仍然占用着内存空间,因为程序中仍然保存着对它的引用,而使得GC无法将它回收或得到及时释放,从而造成的内存空间浪费的问题,称为内存泄露。 二、内存泄露的根本原因:     长生命周期的对象持有短生命周期对应的引用,因为短生命周期对象可能不再使用,而因为长生命周期对象持有着对其的引用,因此GC无法将其进行回收。 三、内存

woliuyunyicai的专栏 1909

android内存泄露怎么办,Android内存泄露的解决之道

面试的时候经常会被问道内存泄露优化,和碰到OOM该怎么出来,今天就做个总结。为什么会内存泄露?根本原因就是一个永远不会被使用的对象,因为一些引用没有断开,没有满足GC条件,导致不会被回收,这就造成了内存泄露。比如在Activity中注册了一个广播接收器,但是在页面关闭的时候没有进行unRegister,就会出现内存溢出的现象。如果我们的java运行很久,而这种内存泄露不断的发生,最后就没内存可用了...

weixin_36368404的博客 235

Android内存泄漏简介 与 android内存泄露的问题

不少人认为JAVA程序,因为有垃圾回收机制,应该没有内存泄露。 其实如果我们一个程序中,已经不再使用某个对象,但是因为仍然有引用指向它,垃圾回收器就无法回收它,当然该对象占用的内存就无法被使用,这就造成了内存泄露。如果我们的java运行很久,而这种内存泄露不断的发生,最后就没内存可用了。当然java的,内存泄漏和C/C++是不一样的。如果java程序完全结束后,它所有的对象就都不可达了,系统

蚁人日记 1203

Android应用内存泄露分析、改善经验总结

原则   对于性能问题,分析和改善有必要遵循以下原则: 一切看数据说话,不能跟着感觉走,感觉哪有问题就去改,很有可能会适得其反; 性能优化是一个持续的过程,需要不断地改善,不要想着一气呵成; 对于性能问题,不一定必须要改善,受限于架构或者其它原因某些问题可能会很难改善,必须要先保证能用,再才考虑好用。 改善后一定要验证,任何一个地方的改动都需要验证,避免因为改善性能问

Warden032的博客 792
上一篇: RatingBar 不可点击
下一篇: Jquery UI控件之tab
stulpnn
博客等级 码龄18年 0粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值