Android Profiler-性能优化分析工具扫盲
Android Profiler
Android Studio 3.0及更高版本中的Android Profiler取代了Android Monitor工具。Android Profiler工具提供了实时数据,可帮助您了解您的应用如何使用CPU,内存,网络和电池资源。
Profiler页面显示
image1.pngCPU:就是当前app占用的CPU百分比;
MEMORY:就是当前app占用的内存大小;
NETWORK:就是当前app使用的网络流量;
ENERGY:就是当前app的电量耗用情况。
内存分析
image2.pngJava: Memory from objects allocated from Java or Kotlin code.【Java内存区域,主要是对象和Bitmap】
Native: Memory from objects allocated from C or C++ code.【C相关】
Stack: Memory used by both native and Java stacks in your app. This usually relates to how many threads your app is running.【这是一些方法栈和线程占用的区域】
Code: 就是写代码库.so等等;
Other: Memory used by your app that the system isn't sure how to categorize.【系统也不确定是个啥】
Graphics: Memory used for graphics buffer queues to display pixels to the screen, including GL surfaces, GL textures, and so on. (Note that this is memory shared with the CPU, not dedicated GPU memory.)【像素图像图形渲染我的理解,这是之前我们没见过的】
您可以使用已分配对象列表上方的两个菜单来选择要检查的堆以及如何组织数据。
从左侧菜单中,选择要检查的堆:
image3.png- 默认堆:系统未指定堆时。
- image heap:系统启动映像,包含在启动期间预加载的类。保证这里的分配永远不会动摇或消失。
- zygote heap:写时复制堆,Android系统中从其中复制应用程序进程的堆。
- 应用程序堆:应用程序在其上分配内存的主堆。
- JNI堆:堆,显示Java本机接口(JNI)引用的分配和释放位置。
从右侧的菜单中,选择如何安排分配:
image4.png- 按班级排列:根据班级名称对所有分配进行分组。这是默认值。
- 按程序包排列:根据程序包名称对所有分配进行分组。
- 按调用堆栈进行排列:将所有分配分组到其相应的调用堆栈中。
Java本机接口(JNI)是一个框架,允许Java代码和本机代码相互调用。
当您的应用程序运行时,选择要检查的时间轴的一部分,然后从类列表上方的下拉菜单中选择JNI堆。然后,您可以像往常一样检查堆中的对象,然后在“分配调用堆栈”选项卡中双击对象,以查看JNI引用在代码中的分配和释放位置