urlname
type
Post
password
SyncToConfluence
category
Android
date
Feb 22, 2023 12:51
slug
c0f298f2077e
icon
Button
catalog
summary
tags
Android
性能优化
cover
Status
BusyTime
Status 1
status
Published
内存描述指标
主要用来度量一个 APP 的内存情况,更直观地展示出优化前后的效果
- 主要有 6 个指标
- PSS ( Proportional Set Size )
- RSS( Resident Set Size )
- Private Clean / Private Dirty
- Swap Pss Dirty
- Heap Alloc
- Heap Free
实际使用的物理内存,会按比例分配共享的内存。
PSS 中的共享库会按比例分担,但是 RSS 不会,它会完全算进当前进程,所以把所有进程的 RSS 加总后得出来的内存会比实际高。
当我们执行dump meminfo时会看到这个指标,Private 内存是只被当前进程独占的物理内存。独占的意思是即使释放之后也无法被其他进程使用,只有当这个进程销毁后其他进程才能使用。Clean表示该对应的物理内存已经释放了,Dirty表示对应的物理内存还在使用。
这个指标和上面的Private指标刚好相反,Swap的内存被释放后,其他进程也可以继续使用,所以我们在meminfo中只看得到Swap Pss Dirty,而看不到Swap Pss Clean,因为Swap Pss Clean是没有意义的。
通过Malloc、mmap等函数实际申请的虚拟内存,包括 Naitve 和虚拟机申请的内存。
空闲的虚拟内存。
内存数据获取
主要用于获取在 内存中的数据
- 主要有 2 种方式:
- 线下通过
adb命令获取: - 线上通过代码获取:
- 以上两种方法,其原理都是一样的,都是调用的 android_os_Debug.cpp 对象中的
android_os_Debug_getDirtyPagesPid接口
内存模型详解
具体展示 内存模型中各个部分的作用和含义

A区域
数据①:maps 文件数据
通过 maps 文件我们可以详细知道这个进程的内存中存放了哪些数据。maps 文件存放在 /proc/{ pid }/maps 路径中,该路径除了存放该进程的 maps 文件,还存放了该进程的所有其他信息的数据。
数据②:graphic 相关数据
- Gfx dev
绘制时分配,并且已经映射到应用进程虚拟内存中。
- GL mtrack
绘制时分配,没有映射到应用地址空间,包括纹理、顶点数据、shader program 等。
- EGL mtrack
应用的 Layer Surface,通过 gralloc 分配,没有映射到应用地址空间。不熟悉 Layer Surface 的话,可以将一个界面理解成一个 Layer Surface,Surface 存储了界面的数据,并交给 GPU 绘制。
数据③:Alloc 内存
该区域内存数据,是调用 malloc、mmap、calloc 等内存申请函数时积累的数据
- 可以通过以下的方法获取该区域的数据:
- 获取 Java 层申请的内存:会直接去 Art 虚拟机中获取虚拟机已经申请的内存大小。
- 获取
Native申请的内存:会调用android_os_Debug.cpp对象中的android_os_Debug_getNativeHeapSize接口获取数据,该接口又是调用的mallinfo函数,mallinfo函数会返回native层已经申请的内存大小。
B区域
Java Heap
(Dalvik Heap 的 Private Dirty 数据) + ( .art mmap 部分的 Private Dirty 和 Private Clean 数据) + getOtherPrivate ( OTHER_ART ) 。这里的 .art 是应用的 dex 文件预编译后的 art 文件,所以也是属于该应用的 JavaHeap。
Native Heap
Native Heap 的 Private Dirty 数据
Code
.so .jar .apk .ttf .dex .oat 等资源加总
Stack
getOtherPrivateDirty ( OTHER_STACK )
Graphics
gl,gfx,egl 的数据加总
System
( Total Pss ) - ( Private Dirty 和 Private Clean 的总和)。主要是系统占用的内存,如共享的字体、图像资源等
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/c0f298f2077e
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts