导航:首页 > 编程大全 > android内存分析工具

android内存分析工具

发布时间:2025-01-06 03:59:56

⑴ 利用 Android Profiler 评估应用性能-Memory Profile

Android Profiler 的Memory Profile组件是评估应用性能的关键工具,特别是针对内存问题,如卡顿、冻结和崩溃。它实时监控应用内存使用,允许开发者捕获堆转储、强制垃圾回收和追踪内存分配,以找出潜在的内存泄漏和性能瓶颈。

分析应用内存至关重要,因为Android的垃圾回收机制可能会在回收内存时暂停应用。如果分配内存速度过快,这可能导致应用响应延迟,甚至迫使系统终止进程。Memory Profiler有助于识别这些问题,通过可视化内存使用情况,帮助开发者优化内存管理。

在Memory Profiler中,用户可以直观地看到内存使用的时间轴,以及详细的内存分配、堆转储和JNI引用信息。在Android 8.0及以上版本,内存分析是自动的,而在低版本设备上可能需要启用高级分析。通过调整内存采样设置,开发者可以优化分析性能,同时检测和解决JNI引用问题,以避免内存泄漏和全局JNI引用限制。

为了进一步追踪,用户可以捕获堆转储,检查保留内存的对象,识别可能的内存泄漏。堆转储数据可以另存为.HPROF文件,以便后续分析或与第三方工具(如jhat)结合使用。通过导入和分析.HPROF文件,开发者可以深入挖掘应用的内存行为,确保应用的稳定和高效运行。

⑵ Android内存性能

最近看到测试同事在模拟Android低内存场景,原来是测试后台Service是否能被杀死。

为了顺利测试,我着手编写了一个内存测试工具,名为Ramtool。

1. 最大可用物理内存

1.1 背景

如何完全占用Android的物理内存,并非简单通过new申请内存就能实现。

Android的Framework在java层,因此App进程需要启动jvm虚拟机,运行在jvm中的程序都会受到jvm最大heap限制。

Android的jvm同样受到system/build.prop控制,现代Android系统默认jvm启动heap为64MB,最大扩容256MB。

1.2 方案

1.2.1 占用内存

总体思路是摆脱android jvm,使用C/C++制作Native动态链接库,直接向Linux内核申请内存。

此外,Native还可以摆脱jvm的操作时内存的cpu损耗,摆脱jvm的gc控制,实现手动释放内存防止影响后续测试。

现代操作系统,包括Linux,都使用了虚拟内存的概念来进行进程间内存隔离。

如果只是不停通过malloc申请堆内存,即使申请的内存容量已经远远超过硬件物理内存,也不会发生OOM崩溃。

1.2.2 工程实现

Native OOM崩溃可能会影响进程稳定性,申请到的内存释放也会很麻烦,所以,放到子进程里去申请heap内存,每次申请1MB,直到子进程崩溃,catch住binder的跨进程通信异常时,就判断为可用的最大物理内存。

在大部分机型上都是没问题的,但在部分超大内存机型上,例如realme的16GB内存机型,单进程系统限制最大内存为10GB,所以为了测试极限物理内存占用,还要采用多进程方案。

申请完内存,记得要在每次测试完成后,即使进行内存释放。内存泄漏会影响后续内存测试的准确性。

1.2.3 结果

6GB ram的红米K30手机上,app最大可用的物理内存极限在4GB左右。

16GB ram的Realme手机上,app最大可用的物理内存极限在11.5GB左右。

2. 内存带宽

2.1 背景

做完最大可用内存后,感觉做都做了,不如再做一个内存带宽测试工具。

市面上的内存带宽测试都太抽象了,不知道对应到代码上具体是什么样的性能。

内存不像是硬盘,可以很直接看到读写性能。

所以应该怎样做呢?

2.2 方案

2.2.1 开源方案

先看下开源的方案都是怎么做的。

2.2.2 硬件原理

我们再来看下CPU的硬件工作方式。

为了最大程度利用内存带宽,所以stream中选择数据类型也使用了double。

所以直接用stream就完了吗?

Stream的方案并不能最大程度发挥内存带宽。

2.2.3 小故事

(此段故事可以跳过阅读)

(故事结束,正文开始)

但实际上内存就是慢的一批,测试发现系统memcpy很慢,开始翻对应Android版本的Linux内核源代码,发现历史上Linux的内存拷贝可以简单理解为就是个for循环,按照最小内存单位进行拷贝...

且现代处理器都支持SIMD指令,例如x86指令集阵营的SSE系列指令集,AVX指令集;arm阵营的neon指令,advanc-simd指令,还有最新arm-v9上的SVE指令,都是SIMD指令集。

使用SIMD指令对于测试内存带宽,可以最大限度避免CPU的影响,提高带宽。

2.2.4 最终方案

参考ARM公司最新的优化库,分段对内存进行拷贝。

使用SIMD指令的memcpy进行内存带宽测试,相比于stream的内存方案,内存带宽大很多。

其他内存操作算法参考stream。

内存带宽测试功能截图:

3. 缓存/内存延迟

3.1 背景

做完内存带宽后,感觉做都做了(梅开二度),专业测试工具怎么能少了内存延迟测试。

CPU只能操作寄存器上的数据,CPU在操作数据前必须要将数据从内存载入到寄存器。

内存太慢了,所以CPU厂商通过SRAM实现了缓存。

缓存对于程序来说是透明的,只能通过细微的逐步扩大容量访问内存才能测得缓存延迟。

所以应该怎样做呢?

3.2 方案

3.2.1 算法

先看看开源是怎么做的。

3.2.2 参数

经过多次实验,步长取2048字节,容量为256MB时,测试结果较为准确,且测试时长可接受。

3.2.3 数据处理

经过上面的步骤,已经可以成功取到内存延迟的数据。

将数据导入excel,先画图观察下数据曲线。

首先访问命中cache,随着访问容量增大,逐渐冲破cache容量,cache命中率下降。

算法实现:

3.2.4 结果

通过数据分析,计算出cache和内存的延迟平台的均值大小,还用数据画了个折线图:

4. 总结

似乎目前市面上Android平台还没有比较专业倾向的内存测试工具,简陋封装了下UI,发布到了github,让大家有的用。

测试结果仅具备横向机型间对比。

Ramtool项目地址:github.com/park671/Ramt...

拒绝白嫖,从你我做起,给个star再拿代码~

⑶ android studio有哪些性能分析工具

导言:来
Android应用在CPU占用,内存源消耗方面的性能指标是影响产品质量的重要因素,由于QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进行软件选用的决策。
目前,已经有很多可以监控android app 性能的工具可以供开发人员使用,如:基于Eclipse插件体系的MAT,其通过生成.hprof文件对内存泄露情况进行排查;内存检测工具APT:提供CPU利用率实时曲线图,方便对比测试内存泄露问题[图0-1]

阅读全文

与android内存分析工具相关的资料

热点内容
oracle怎么建立数据库 浏览:459
c盘里哪些文件是没有用的 浏览:457
图片格式的文件怎么改 浏览:608
win10通信端口 浏览:396
clist检查重复数据库 浏览:522
关联有什么app 浏览:511
如何保存lumion文件在哪里 浏览:282
word2007蓝色底纹 浏览:745
iphone4s常用软件 浏览:582
能在手机里搜索文件的 浏览:532
ipad如何上传腾讯视频文件 浏览:292
厦门妇幼什么app可以查看报告 浏览:45
rz文件夹 浏览:491
网件路由的原始密码错误 浏览:877
相机照片如何传iphone6 浏览:625
导航网站哪个是最好的 浏览:150
电脑上游戏网站双人单挑的有哪些 浏览:819
java中英文排序 浏览:668
sai渐变工具 浏览:756
替换文件名中符号 浏览:921

友情链接