性能优化3-内存优化工具实操.

adb 内存报告

meminfo 特定时间的内存分期

adb shell dumpsys meminfo 查看APP的内存分配情况
adb shell dumpsys meminfo 1343 1343是APP的pid
meminfo 配合watch 是不错的选择.固定时间对比来查看app的内存情况.
watch -n 5 dumpsys meminfo com.lakala.android
个人感觉这个命令更多的是查看对比的意义.或者你在进行一个操作前后生成两份报告.来对比内存变化.

pss 是APP私有内存和APP使用的共享库按比例分配的内存之和,比如有A,B两个进程都使用了 C这个共享内存.那么C占用的内存会按比例分配在 A和B的 Pss中.
uss 是APP的私有内存.

  • pss占用比例排队,占用越高的越在前边


    内存报告1
  • oom 排队 ,约靠近下发的进程越容易被杀死,


    报告2
  • 整机pss分布,降序排列各类pss占用
内存报告4
  • 打印特定进程信息


    image.png

    image.png

    adb shell dumpsys meminfo
    adb shell dumpsys meminfo [pid | packagename] 指定 pid或者 packageName来分析

Total PSS by process:  java层内存使用情况. pss是用户进程内存+按比例分配的共享库,so文件内存
    273,645K: system (pid 1071)
    170,846K: com.android.systemui (pid 1677)
Total PSS by OOM adjustment:
    400,194K: Native   //就是系统为程序的OOM排序结果,OOM异常的时候会根据这个表单从下往上杀掉进程释放内存。
         57,665K: android.hardware.graphics.allocator@2.0-service (pid 592)
         34,576K: CameraDaemon (pid 747)
         32,173K: android.hardware.graphics.composer@2.2-service (pid 593)
 273,645K: System      //按进程优先级分别来统计对应的进程及其内存使用情况
        273,645K: system (pid 1071)
    353,848K: Persistent   //持久系统进程
        170,846K: com.android.systemui (pid 1677)
         43,835K: com.huawei.HwOPServer (pid 1858)
     50,933K: Persistent Service
         15,344K: com.android.bluetooth (pid 31551)
         12,459K: com.huawei.nearby (pid 2307)
         11,207K: com.huawei.iconnect (pid 2293)
    304,581K: Foreground  //前台系统进程
        112,629K: com.huawei.android.launcher (pid 1914 / activities)
        110,664K: com.huawei.intelligent (pid 4303)
    263,575K: Visible
         46,635K: com.google.android.gms.persistent (pid 3313)
         43,081K: com.huawei.recsys (pid 3392)
    108,364K: Perceptible 
         70,673K: com.baidu.input_huawei (pid 3593)
         18,828K: android.process.acore (pid 17969)
     17,167K: A Services
         17,167K: com.android.settings (pid 15959)
      8,280K: Previous
          8,280K: com.google.process.gservices (pid 8556)
    186,447K: B Services
         40,067K: com.tencent.mobileqq:MSF (pid 6709)
         36,461K: com.tencent.mm (pid 3627)
    493,057K: Cached
         63,156K: com.google.android.gms (pid 3903)
         61,971K: com.android.gallery3d (pid 20172)
    Total RAM: 5,838,092K (status normal)
 Free RAM: 3,016,125K (  493,057K cached pss + 2,047,496K cached kernel +   475,572K free)
 Used RAM: 2,586,750K (1,967,034K used pss +   619,716K kernel)
 Lost RAM: 1,030,267K
     ZRAM:    92,028K physical used for   408,368K in swap (2,293,756K total swap)
   Tuning: 384 (large 512), oom   322,560K, restore limit   107,520K (high-end-gfx)

*APP进程分为前台进程,缓存进程和后台进程
缓存进程是指APP不可见,也没有服务在运行,但是当前内存很充足,就保留的进程.

--这里留坑.还不太理解.

procstats 一段时间的内存分析

Procstats可以去监视你app在一段时间的行为,包括在后台(background)运行了多久,并在此段时间使用了多少内存

  • adb shell dumpsys procstats com.lakala.android
    列出过去24小时,3小时 当前所有状态下的统计

总内存:低水平/平均水平/高水平/私有内存:低水平/平均水平/高水平
这里的总内存和私有内存就是 pss和uss


部分说明

heap Dump

用来查看gc相关的信息,查看当前APP运行时都给什么样的类型分配了多少内存空间,这个工具在DDMS里.


使用方式

放大右边.是当前页面的内存分配,其中图片以byte[]方式占用内存


页面内存分配
  1. 堆内存 19.283mb
  2. 已分配内存 7.283mb
  3. 释放内存 12.00mb
  4. 使用率 37.77%
  5. 存活对象个数 138644
    下边是一些详细数据.这个主要是用来看一看APP中内存的分配

上边的三个工具其实都是静态的查看内存的方式,更多是发现一些问题.但是没法具体定位的

mat

理解:这个工具是用来分析内存的,可以看到整个内存的分配情况和之间对象的引用情况.正确的用法是用来检测内存泄露.那么就是首先你要对觉得有内存泄露的地方进行分析.内存泄露在内存中的表现无非就是有对象无法释放.所以用软件的大概规则就是找到应该释放却没释放的对象.然后查找是哪里在引用他.从而定位位置.

几个好的文章.看完人家写的.真心感觉没有记录的必要了...

http://liuwangshu.cn/application/performance/ram-5-mat.html
https://zhuanlan.zhihu.com/p/27593816

内存分析工具,会生成一个hprof文件.这个文件在Android studio打不开 要在 sdk/platform-tools/hprof-conf 工具下进行转化
hprof-conv com.lakala.android.hprof test.hprof
把原来的转化成test.hprof 就可以用AndroidStudio打开了

生产hprof

test.hprof

这个文件在androidStudio上的效果不好.需要下载一个单独的MAT APP来看.下载地址.
https://www.eclipse.org/mat/downloads.php

浅堆(Shallow Heap)是指一个对象所消耗的内存,不包含任何他引用的其他对象的内存
深堆 (Retained Heap)是指一个对象所消耗的内存和只被他引用的其他对象的浅堆内存之和.

深堆可以理解为当这个对象被gc后所能清理出来的所有内存.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343