Android内存占用情况分析

Android内存占用情况分析

   本文主要讲解用系统自带工具分析android手机在运行时内存分部情况,当手机内存不足时,可以按照下面步骤分析到底是谁占用了内存。

查看手机剩余内存情况

在终端输入以下指令:

adb shell dumpsys meminfo

主要信息如下图:

剩余内存描述
   查看手机剩余内存方法有很多,这个方法比较准确。

Total RAM为手机的总内存;
Free RAM为剩余内存:其中cached pss为后台缓冲进程,当系统内存不足或缓冲进程数目达到系统限制最大数时会杀掉(部分)以释放内存。cached为高速缓冲存储器的内存,这部分内存已经分配好了,但是系统为了节约频繁申请内存开销,free时会把一部分内存cache起来,当用户再次申请内存时可能会直接从缓冲拿一块出来。free为未分配的物理内存;
Used RAM为用户态使用总内存;
Lost RAM为内核态使用内存,比如OpenGL纹理内存、GPU占用内存、图形显示ION buffer都包含在Lost RAM里。

   值得注意的是当Free RAM比较小时可以认为系统内存不足(有种情况不能确定就是:Lost RAM占用内存很大,Lost RAM可能是内核缓冲内存太多了导致Free RAM小,但是并不是内存足,因为当内存不足时kernel会释放缓存,可以通过echo 3 > /proc/sys/vm/drop_caches主动释放)。

   如果想了解根据详细内存分配情况可以在终端输入:

adb shell cat /proc/meminfo

详细内存分配情况
其中:

MemTotal: LowTotal与HighTotal总和,系统总可用RAM大小(即物理内存减去一些预留位和内核的二进制代码)

MmFree: LowFree与HighFree的总和,被系统留着未使用的内存

Buffers: 用来给文件做缓冲大小

Cached: 被高速缓冲存储器(cache memory)缓存的内存的大小(等于 diskcache minus SwapCache)

SwapCached: 被高速缓冲存储器(cache memory)用的交换空间的大小已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口

Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用

Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径

HighTotal: 高内存,内核不能直接访问的这部分内存

HighFree: 高内存剩余大小

LowTotal: 底内存,内核能够直接访问的内存

LowFree: 低内存剩余大小

SwapTotal: 交换空间的总大小

SwapFree: 未被使用交换空间的大小

Dirty: 等待被写回到磁盘的内存大小

Writeback: 正在被写回到磁盘的内存大小

AnonPages:未映射页的内存大小

Mapped: 设备和文件等映射的大小

Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗

SReclaimable:可收回Slab的大小

SUnreclaim: 不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)

PageTables: 管理内存分页页面的索引表的大小

NFS_Unstable: 不稳定页表的大小

VmallocTotal: 可以vmalloc虚拟内存大小

VmallocUsed: 已经被使用的虚拟内存大小

查看进程内存占用情况

top指令查看各进程内存

   在终端输入:

adb shell top

top指令查看内存

查看某个进程内存

   找到要查看的进程pid,在终端输入:

adb shell dumpsys meminfo pid

单个进程内存

   如上图,可以分别看到Native Heap、Dalvik Heap、PSS大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值