本篇主要讲解android内存性能优化之检测方案。内存性能主要包括内存泄漏, 内存抖动, 内存持续增长(但GC后会下降), 内存占用过大等问题。
Android内存分析方向:
Java 内存分析
Java中的内存泄露主要特征:可达,无用
无用指的是创建了但是不再使用之后没有释放
能重用但是却创建了新的对象进行处理
Native 内存分析
堆中new的对象未释放
对象引用导致无法释放
JS 中内存分析
本篇主要讲解Java内存分析。
一. 日志分析
查看日志中是否有频繁的GC。通常通过log,我们可以初步定为大部分内存等问题。
二. 常见内存泄漏查找
Context 泄漏, 主要为Activity 传递泄漏, context 未使用applciationConext 在单例创建时。
Handler 泄漏 , handler中持有view ,context 等做耗时操作。
Cursor 泄漏 , cursor未关闭
register 未 unregister
Bitmap
adapter 未使用convertView
不良代码等
三. 命令dumpsys meminfo分析
adb shell dumpsys meminfo com.i2finance.shexpress
Applications Memory Usage (kB):
Uptime: 142597122 Realtime: 236611715
** MEMINFO in pid 25126 [com.i2finance.shexpress] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 61111 61084 0 0 69888 64350 5537
Dalvik Heap 49451 49316 0 0 71737 67348 4389
Dalvik Other 3333 3332 0 0
Stack 960 960 0 0
Cursor 12 12 0 0
Ashmem 130 88 0 0
Gfx dev 23780 23780 0 0
Other dev 4 0 4 0
.so mmap 4373 396 3108 0
.jar mmap 80 0 76 0
.apk mmap 17986 64 17580 0
.ttf mmap 96 0 80 0
.dex mmap 15729 16 14244 0
.oat mmap 2378 0 624 0
.art mmap 1859 1624 8 0
Other mmap 2039 12 1308 0
Unknown 84240 84240 0 0
TOTAL 267561 224924 37032 0 141625 131698 9926
App Summary
Pss(KB)
------
Java Heap: 50948
Native Heap: 61084
Code: 36188
Stack: 960
Graphics: 23780
Private Other: 88996
System: 5605
TOTAL: 267561 TOTAL SWAP (KB): 0
Objects
Views: 429 ViewRootImpl: 2
AppContexts: 2 Activities: 1
Assets: 7 AssetManagers: 3
Local Binders: 37 Proxy Binders: 31
Parcel memory: 26 Parcel count: 65
Death Recipients: 2 OpenSSL Sockets: 6
SQL
MEMORY_USED: 567
PAGECACHE_OVERFLOW: 157 MALLOC_SIZE: 62
DATABASES
pgsz dbsz Lookaside(b) cache Dbname
4 24 45 5/24/6 /data/user/0/com.i2finance.shexpress/databases/pa_data_cache.db
4 28 19 1/16/2 /data/user/0/com.i2finance.shexpress/databases/mpush.db
4 60 37 5/18/6 /data/user/0/com.i2finance.shexpress/databases/fstandard.db
4 60 91 466/22/11 /data/user/0/com.i2finance.shexpress/databases/fstandard.db (2)
4 24 40 5/24/6 /data/user/0/com.i2finance.shexpress/databases/pa_data_cache.db
Asset Allocations
zip:/data/user/0/com.i2finance.shexpress/files/paanydoor_resource_3.5.0.36.jar:/resources.arsc: 67K
meminfo的信息中各字段都是什么含义, 要理解各字段含义,我们才好进行内存的优化。
首先了解两个概念:
私有内存(Dirty and Clean):
进程独占内存。也就是进程销毁时可以回收的内存容量。通常priv