对android 内存分析比较好的Blog:

1.http://blog.csdn.net/gemmem/article/details/8920039

主要介绍

1、进程的地址空间。

2、进程内存空间和RAM之间的关系。

3、Android中的进程。

4、Android中进程的堆内存。

5、Android的 java程序为什么容易出现OOM。

6、Android如何应对RAM不足。

7、如何查看RAM使用情况。

8、如何查看进程的内存信息。

9、应用程序如何绕过dalvikvm heapsize的限制。

10、Bitmap分配在native heap还是dalvik heap上?

一、分析整个系统的内存使用情况:

1、 Procrank

Android 自带的内存分析工具,对各个进程的内存使用进行排序(by Pss default.

# procrank
PID Vss Rss Pss Usscmdline

3351 1058776K163952K 141197K 139596K com.google.earth
2616 943156K116020K 93360K 91724K com.android.vending
539 990756K 112504K91393K 89808K com.android.systemui
4657 995760K105964K 77829K 70776K com.rovio.angrybirds
...
119 31904K 7676K6038K 5900K /system/bin/surfaceflinger
122 27468K 3788K3045K 2964K /system/bin/mediaserver
...
120 865084K 24308K2263K 860K zygote
...
------ ------ ------
717098K 669272KTOTAL
RAM: 1124832Ktotal, 105528K free, 3808K buffers, 136624K cached,
656K shmem, 23656Kslab

2、 Dumpsysmeminfo

Android 自带的内存分析工具,dumpsys只能查看java进程,procrank可以查看Native进程和java进程。 .

3、 Cat /proc/meminfo

查看总的内存使用情况.

MemTotal:396708kB

MemFree:4088kB

Buffers:5212kB

Cached:211164kB

Mlocked:0kB

HighTotal:0kB

HighFree:0kB

LowTotal:396708kB

LowFree:4088kB

SwapTotal:0kB

……

……

MemTotal:可以使用的RAM总和(小于实际RAM,操作系统预留了一部分)

MemFree:未使用的RAM

Cached:缓存(这个也是app可以申请到的内存)

HightTotalRAM中地址高于860M的物理内存总和,只能被用户空间的程序使用。

HightFreeRAM中地址高于860M的未使用内存

LowTotalRAM中内核和用户空间程序都可以使用的内存总和(对于512MRAM: lowTotal= MemTotal

LowFree: RAM中内核和用户空间程序未使用的内存(对于512MRAM: lowFree = MemFree

4、 Ps -x

该方式主要得到的是内存信息是VSIZE RSS.

二、分析单个进程的内存使用情况

1、Procmem +进程号

可查看进程的各个部分内存使用情况,包括通过驱动申请的内存

# procmem 119
Vss Rss Pss UssShCl ShDi PrCl PrDi Name

------- -------------- ------- ------- ------- ------- -------
4K 0K 0K 0K 0K 0K0K 0K
1012K 4K 4K 4K 0K0K 4K 0K [stack:944]
512K 512K 512K 512K0K 0K 36K 476K /dev/mali0
512K 512K 512K 512K0K 0K 0K 512K /dev/mali0
516K 12K 12K 12K 0K0K 12K 0K [anon:libc_malloc]
512K 512K 512K 512K0K 0K 224K 288K /dev/mali0
512K 512K 512K 512K0K 0K 32K 480K /dev/mali0
516K 12K 12K 12K 0K0K 12K 0K [anon:libc_malloc]
...
2680K 2668K 2668K2668K 0K 0K 2668K 0K [heap]
132K 20K 20K 20K 0K0K 20K 0K [stack]
0K 0K 0K 0K 0K 0K0K 0K [vectors]
------- -------------- ------- ------- ------- ------- -------
31904K 7676K 6039K5900K 1760K 16K 4144K 1760K TOTAL

2、Dumpsys meminfo + pid/packageName

可查看进程的dalvik-heap,NativeHeap大小

[email protected]:/ $ dumpsys meminfo 1051

dumpsys meminfo 1051

Applications Memory Usage (kB):

Uptime: 184110340 Realtime: 419146160

** MEMINFO in pid 1051[com.android.systemui] **

Shared PrivateHeap Heap Heap

Pss DirtyDirty Size AllocFree

------ ------------ ------ ------------

Native 00 0 2427621430 2321

Dalvik17339 5612 1723620864 15142 5722

Stack 144 8144

Cursor 0 00

Ashmem 0 00

Other dev 6564 16965756

.so mmap 1559 27041192

.jar mmap 0 00

.apk mmap 1197 00

.ttf mmap 481 00

.dex mmap 662 00

Other mmap 42 84

Unknown 18510 52018504

TOTAL 46498 1054842836 45140 365728043

Objects

Views: 316 ViewRootImpl: 2

AppContexts: 29 Activities: 0

Assets: 8AssetManagers: 8

Local Binders: 64 Proxy Binders: 69

Death Recipients: 5

OpenSSL Sockets: 0

SQL

MEMORY_USED: 0

PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0

Asset Allocations

zip:/data/app/com.UCMobile-2.apk:/resources.arsc: 522K

zip:/data/app/com.tencent.mobileqq-1.apk:/resources.arsc: 1204K

更多相关文章

  1. Android进程间通信--消息机制及IPC机制实现
  2. Android 8.1 zygote创建新应用进程
  3. android杀进程方法
  4. 利用oom_adj提高Application所在进程的优先级
  5. Android:什么情况?
  6. android中线程进程模型
  7. Android内存管理基本介绍
  8. Android ContentProvider 多进程multiprocess 详解

随机推荐

  1. Android(安卓)Webview组件使用总结
  2. Android JNI开发入门之二(javah命令的补
  3. 菜鸟多了我们就有价值了,Android开发没前
  4. 一张图告诉你:Android系统哪代强?
  5. Android 4.1模拟器访问服务器接口
  6. 参加某培训班后,已经学习了java迷茫了,求解
  7. Android adapter 数据适配器
  8. Android编程之manifest上遇到的错误
  9. OpenCore的代码结构
  10. Android逆向之旅---Hook神器家族的Frida