内存优化(四)

Applications Memory Usage (kB):

Uptime: 14237237 Realtime: 23790474

** MEMINFO in pid 8071 [com.xtc.watch] **

Pss Private Private Swapped Heap Heap Heap

Total Dirty Clean Dirty Size Alloc Free


Native Heap 0 0 0 0 21924 8558 6405

Dalvik Heap 122472 122372 0 15672 143308 65400 77908

Dalvik Other 10361 10076 164 224

Stack 440 440 0 8

Other dev 4 0 4 0

.so mmap 6441 3452 2636 2048

.apk mmap 611 0 340 0

.ttf mmap 538 0 504 0

.dex mmap 8407 1640 2940 40

Other mmap 80 4 0 0

Unknown 10940 10936 0 148

TOTAL 160294 148920 6588 18140 165232 73958 84313

Objects

Views: 288 ViewRootImpl: 2

AppContexts: 11 Activities: 2

Assets: 5 AssetManagers: 5

Local Binders: 30 Proxy Binders: 38

Death Recipients: 3

OpenSSL Sockets: 1

SQL

MEMORY_USED: 138

PAGECACHE_OVERFLOW: 24 MALLOC_SIZE: 62

DATABASES

pgsz dbsz Lookaside(b) cache Dbname

4 20 306 25/47/12 /data/data/com.xtc.watch/databases/upload.db

  • Native Heap是native层的内存堆栈,Dalvik Heap是java层的内存堆栈,如果这二者加起来的内存占用超过了应用最大内存限制就会报OOM异常,剩下的.so mmap是 C 库代码占用的内存,.jar mmap是Java 文件代码占用的内存 ,.apk mmap是apk代码占用的内存,.dex mmap是Dex 文件代码占用的内存

  • Objects中的Activities表示当前内存中的activity对象的个数,启动一个activity就会生成一个activity对象,当退出activity的时候,activity对象就会被释放,所以反复的进出一个activity界面然后查看Activities的个数有没有保持不变,如果增加了,那么就说明这个activity对象没有被释放,也就是说可能存在内存泄漏,但是具体哪里泄漏了并不知道

[](()DDMS查看内存使用情况

eclipse中有一个ddms工具,可以查看线程信息(Threads),内存使用情况(VM Heap),内存分配跟踪(Allocation Tracker),CUP使用情况(Sysinfo CUP load),内存使用饼状图(Sysinfo Memory usage),这里我们暂时用到VM Heap,选择要查看的app进程,点击左上角的show heap updates,选择VM Heap并点击Cause GC按钮,然后就出现下图:

这里写图片描述

观察data object的Total Size选项,这个是app的创建的java对象做占用的内存大小,Count是总内存的对象的个数,反复的进出一个activity,看data object的Total Size有没有明显的增加,正常情况下进入一个activity的时候会明显增加,退出一个activity会有明显的回落,总体是维持在一个比较稳定的水平如果反复进出activity,Total Size不断上升,那么可能就存在内存泄漏了,需要具体排查

[](()MAT分析内存泄漏,用AndroidStudio的Monitors的Memory

  • 多点击几下Initiate GC来回收一下可被释放的java对象,因为java的GC是定期有条件执行的,当内存中只存在很少的无用对象,这时候可能并不会触发GC,所以手动触发GC来保证开始检测内存的时候内存都是最干净的

  • 点击Dump Java Heap,然后过一会儿就会出现一份数据分析文件,这时候的这份数据文件是刚开始的程序对象内存占用情况,接下去就针对一个activity反复操作进出等等各种反复操作,觉得差不多了,这时候就再次疯狂点击Initiate GC回收一下可是放的对象,点击Dump Java He 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 ap,这时候生成的数据分析文件就是经过你疯狂操作后的内存占用情况了

这里写图片描述

生成的上述两个文件右键,点击Export to Standar .hprof导出到一个自己指定的目录文件夹

  • 去官网上面下载MAT来打开这两个文件开始内存分析

这里写图片描述

上图中Problem Suspect部分是代表可能存在内存泄漏的地方,Remainder表示正常的部分,再继续往下看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值