Android命令行查看内存情况

Android内存管理与优化

在学习如何查看内存前先来介绍几个概念
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 native+dalvik 不能超过最大限制。android程序内存一般限制在16M,当然也有24M的。

  用以下命令可以查看程序的内存使用情况:
  adb shell dumpsys meminfo $package_name or $pid    //使用程序的包名或者进程id

下面以我的项目com.soufun.txdai为例
这里写图片描述

我们重点看红色框出来的部分,其中size是需要的内存,而allocated是分配了的内存,对应的2列分别是native和dalvik,当总数也就是total这一列超过单个程序内存的最大限制时,OOM就很有可能会出现了。

多数时候,发生OOM 都是在做一些跟图片相关的操作,以下提出一些建议尽量可以减少这种情况的发生:

1.decode bitmap 的时候,尽量配置下Options,例如:inSameSize
2.Bitmap使用完以后,调用 bitmap.recycle()来释放内存
3.如果应用是基于图片的应用,尽量采用LazyLoad和DymanicRecycle
4.decode bitmap 的时候,将decode代码 try catch 出来,catch oom error,避免程序crash,可以在catch里面做一些释放内存操作。

接下来我们看看第二个命令showmap。查看指定pid进程的内存信息。
使用这个命令我们先要进入linux控制台
这里写图片描述

获取内存大小,可以获取总内存,剩余内存,以及已经使用的内存 文件目录: CheckMemory ...........\.idea ...........\.....\.name ...........\.....\androidDexCompiler.xml ...........\.....\compiler.xml ...........\.....\copyright ...........\.....\.........\profiles_settings.xml ...........\.....\encodings.xml ...........\.....\misc.xml ...........\.....\modules.xml ...........\.....\scopes ...........\.....\......\scope_settings.xml ...........\.....\uiDesigner.xml ...........\.....\vcs.xml ...........\.....\workspace.xml ...........\AndroidManifest.xml ...........\ant.properties ...........\assets ...........\bin ...........\build.xml ...........\CheckMemory.iml ...........\gen ...........\...\me ...........\...\..\normalhh ...........\...\..\........\checkmemory ...........\...\..\........\...........\BuildConfig.java ...........\...\..\........\...........\Manifest.java ...........\...\..\........\...........\R.java ...........\libs ...........\local.properties ...........\out ...........\...\production ...........\...\..........\CheckMemory ...........\...\..........\...........\CheckMemory.apk ...........\...\..........\...........\CheckMemory.unaligned.apk ...........\...\..........\...........\me ...........\...\..........\...........\..\normalhh ...........\...\..........\...........\..\........\checkmemory ...........\...\..........\...........\..\........\...........\BuildConfig.class ...........\...\..........\...........\..\........\...........\MyActivity.class ...........\...\..........\...........\..\........\...........\R$attr.class ...........\...\..........\...........\..\........\...........\R$drawable.class ...........\...\..........\...........\..\........\...........\R$id.class ...........\...\..........\...........\..\........\...........\R$layout.class ...........\...\..........\...........\..\........\...........\R$string.class ...........\...\..........\...........\..\........\...........\R.class ...........\proguard-project.txt ...........\project.properties ...........\res ...........\...\drawable-hdpi ...........\...\.............\ic_launcher.png ...........\...\drawable-ldpi ...........\...\.............\ic_launcher.png ...........\...\drawable-mdpi ...........\...\.............\ic_launcher.png ...........\...\drawable-xhdpi ...........\...\..............\ic_launcher.png ...........\...\layout ...........\...\......\main.xml ...........\...\values ...........\...\......\strings.xml ...........\src ...........\...\me ...........\...\..\normalhh ...........\...\..\........\checkmemory ...........\...\..\........\...........\MyActivity.java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值