android 快速定位内存泄露位置技巧
来源:互联网 发布:csol显卡优化 编辑:程序博客网 时间:2024/06/06 01:25
众所周知,android有垃圾回收机制,在android开发过程中我们不需要去关注内存问题,但是在某些情况下还是会出现内存泄露,在我的工作过程中出现内存泄露的主要原因是因为static变量引起的,然后static变量和其他变量进行相互引用,最终引用到了activity,所以会导致activity退出了但是不能被销毁,从而activity中的view和图片也不能被销毁,极大的消耗了系统内存.经过查找资料和自我分析,个人得出一下分析技巧(以乐视TV版为例,感觉很实用):
Applications Memory Usage (kB):利用到的工具和命令如下:
1.adb shell dumpsys meminfo com.letv.tv
2.Mat工具(Memory analysis tool)
分析过程:
首先打开TV版应用,随机打开几个页面,然后回到首页,在利用ddms进行手动gc一下,然后利用adb shell dumpsys..这个命令得到如下信息
Uptime: 2667972 Realtime: 2667972
** MEMINFO in pid 31769 [com.letv.tv] **
Shared Private Heap Heap Heap
Pss Dirty Dirty Size Alloc Free
------ ------ ------ ------ ------ ------
Native 0 0 0 10520 9999 124
Dalvik 70818 4564 70692 67984 65377 2607
Stack 32 4 32
Cursor 0 0 0
Ashmem 0 0 0
Other dev 4 36 0
.so mmap 3793 2936 2548
.jar mmap 0 0 0
.apk mmap 271 0 0
.ttf mmap 52 0 0
.dex mmap 4076 4 24
Other mmap 1457 8 8
Unknown 7172 396 7164
TOTAL 87675 7948 80468 78504 75376 2731
Objects
Views: 2091 ViewRootImpl: 1
AppContexts: 5 Activities: 1
Assets: 2 AssetManagers: 2
Local Binders: 17 Proxy Binders: 28
Death Recipients: 4
OpenSSL Sockets: 1
SQL
MEMORY_USED: 108
PAGECACHE_OVERFLOW: 24 MALLOC_SIZE: 62
DATABASES
pgsz dbsz Lookaside(b) cache Dbname
4 20 97 4/19/5 /data/data/com.letv.tv/databases/letv.sqlite
我们主要看activities这个数值,如果activity的数量大于1,就存在activity内存泄露,我们可以看到当前只有一个activity存在,所以就不存在activity的泄露.如果存在,我们就利用ddms获取hprof文件,然后经过android sdk中的工具进行转换,得到可以用mat打开的hprof文件,然后过滤出activity对象,然后得到引用路径,一步步查找即可得到内存泄露的真正原因.
0 0
- android 快速定位内存泄露位置技巧
- 定位C++内存泄露位置
- 如何快速定位Android内存泄漏位置
- Android Studion 快速定位内存泄露的方法
- FastMM 定位内存泄露的代码位置
- 定位程序内存泄露的位置
- FastMM 定位内存泄露的代码位置
- android:内存泄露与内存溢出区别、内存泄露定位
- Android eclipse内存管理工具 内存泄露定位
- 快速定位内存泄漏的位置
- VS 查看是否有内存泄露的方法 定位位置
- android中内存泄露及定位
- android native 代码内存泄露 定位方案
- Android Studio快速定位当前文件位置
- VC++内存泄露定位
- 内存泄露定位
- VC内存泄露定位
- WinDbg定位内存泄露
- 【java】容器
- wap(html)知识点整理(持续更新)
- Android CheckBox显示错位的解决 && SparseBooleanArray的使用
- yii2 scenarios rules 使用心得
- Eclipse如何快速修改工程名及包名
- android 快速定位内存泄露位置技巧
- Android中进程与线程
- 轻松把玩HttpClient之模拟post请求示例
- recylerView
- sbt使用自定义仓库
- hdu 5564 Clarke and digits (dp+矩阵加速)
- wtl学习开篇
- 批量删除VC&VS中的临时文件方法
- http压力测试