文档
教程
零散的点
- PowerManager实例的创建,应该使用Application,不应该使用Activity.
- Toast使用的Context应该使用Application.
- Dialog,PopupWindow,在Activity销毁前,应该 dismiss + set null .
adb shell dumpsys meminfo 分析内存占用
adb shell dumpsys meminfo 包名/进程id
- Pss Total 指占用了真实的物理内存的空间.一般用这个值表示APP实际内存占用.
- Objects是统计App内部组件对象个数,其中Views、ViewRootImpl以及Activities个数,在Activity onDestroy后应该都会回收清零,如果onDestroy调用后这几个对象个数没有清零,就可能发生了内存泄漏。
- android程序内存被分为2部分:native和dalvik,dalvik就是java堆,普通java对象是在java堆分配,而bitmap是直接在native上分配,对于内存的限制是 native+dalvik 不能超过最大限制。
- Native Heap:Native代码分配的内存,虚拟机和Android框架分配内存。
- Dalvik Heap:Java对象分配的占据内存
- Dalvik Other:类数据结构和索引占据内存
- Stack:栈内存
- Ashmem:不以dalvik- 开头的内存区域,匿名共享内存用来提供共享内存通过分配一个多个进程可以共享的带名称的内存块。匿名共享内存(Anonymous Shared Memory-Ashmem。Android匿名共享内存是基于Linux共享内存的,都是在tmpfs文件系统上新建文件,并将其映射到不同的进程空间,从而达到共享内存的目的,只是,Android在Linux的基础上进行了改造,并借助Binder+fd文件描述符实现了共享内存的传递。
- Other dev:内部driver占用的内存
- .so mmap: C库代码占用的内存
- .jar mmap: java文件代码占用的内存
- .apk mmap: apk代码占用的内存
- .ttf mmap: ttf文件代码占用的内存
- .dex mmap: dex文件代码占用内存。类函数的代码和常量占用的内存,dex mmap是映射classex.dex文件,Dalvik虚拟机从dex文件加载类信息和字符串常量等。Dex文件有索引区和Data区
- Other mmap: 其它文件占用的内存
- App Summary下:
- Java Heap: java内存占用
- Native Heap: native内存占用
- Code: 代码段内存占用
- Stack: 栈内存占用
- Graphics: Graphics/GL内存占用
- Private Other: 其他私有数据内存占用
- System: 共享内存的PSS占用
Pss Private Private SwapPss Rss Heap Heap Heap
Total Dirty Clean Dirty Total Size Alloc Free
------ ------ ------ ------ ------ ------ ------ ------
Native Heap 24324 24288 0 36 25228 36056 26521 5482
Dalvik Heap 6184 6080 0 34 6944 29386 4810 24576
Dalvik Other 8625 3148 0 0 14532
Stack 1596 1596 0 0 1604
Ashmem 6 0 0 0 24
Other dev 34 4 28 0 420
.so mmap 9856 284 2852 41 60120
.jar mmap 4458 0 1408 0 33012
.apk mmap 1618 0 276 0 21048
.ttf mmap 52 0 0 0 292
.dex mmap 14180 14048 44 0 14440
.oat mmap 128 0 0 0 2760
.art mmap 9311 8748 28 50 18064
Other mmap 851 4 0 0 5552
EGL mtrack 6043 6043 0 0 6043
GL mtrack 18592 18592 0 0 18592
Unknown 548 516 0 4 1088
TOTAL 106571 83351 4636 165 106571 65442 31331 30058
App Summary
Pss(KB) Rss(KB)
------ ------
Java Heap: 14856 25008
Native Heap: 24288 25228
Code: 18912 142656
Stack: 1596 1604
Graphics: 24635 24635
Private Other: 3700
System: 18584
Unknown: 10632
TOTAL PSS: 106571 TOTAL RSS: 229763 TOTAL SWAP PSS: 165
Objects
Views: 17 ViewRootImpl: 1
AppContexts: 6 Activities: 1
Assets: 22 AssetManagers: 0
Local Binders: 1137 Proxy Binders: 39
Parcel memory: 14 Parcel count: 59
Death Recipients: 0 OpenSSL Sockets: 0
WebViews: 0