【腾讯TMQ】【Android场景化性能测试】内存性能及内存泄漏篇

2024-04-14 04:32

本文主要是介绍【腾讯TMQ】【Android场景化性能测试】内存性能及内存泄漏篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、数据源

APP占用内存的测试,要比CPU的更为简单。App memory数据来源是dumpsys meminfo。当然,首先需要了解清楚dumpsys里面这些数值的含义是什么,这里不详述。

Android程序内存主要是两部分:native和dalvik。dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是native+dalvik 不能超过最大限制,否则OOM。

图一dumpsys meminfo信息

二、数据采集

与CPU耗电jiffs数据的采集一致,直接继承Performace基类,然后使用threading.Timer定时器来每隔3秒运行一次__fun_get_mem,调用dumpsys meminfo来获取相关内存信息。如下图中,只收集了TOTAL的数据,如果要具体分析native和dalvik的内存信息,也可以将其数据单独过滤出来保存。start()在主路径的set_up()中调用,保证在执行test() UI自动化场景用例时,定时器一直在收集数据,直到tear_down()调用stop()将定时器取消。

图二内存信息收集逻辑

三、数据使用

评估一个使用场景是否存在内存泄漏,如从APP首页进入一个二级页面,我们只需要将这个操作封装成UI自动化,重复执行N遍,即可获得如下数据曲线。只要数据曲线不是如下图中的灰色平缓曲线,则可以证明该场景是有内存泄漏的。

图三内存泄漏示意图

同样,如果只提供上述的曲线给开发,定位问题也会比较麻烦,测试在内存泄漏的测试中,也可以多做一些。如果是Dalvik内存泄漏,也可以使用Android Device Monitor dump出一份hprof文件(别忘了先手工Cause GC)。

图四DDMSdump内存

拿到hprof文件后,可以导入Android Studio中查看,一般查看Retained Size占用最大的类,分析是否有内存泄漏,一个对象的ShallowHeap,指的是该对象自身占用内存的大小。一个对象的 Retained Heap, 指的是当该对象被GC回收时,所释放掉的内存大小。由于该对象先前可能直接或间接持有对其他多个对象的引用,那么当它自己被回收时,被它所引用的其他对象有些也可能会被回收,所以这种情况下,该对象的Retained Heap既包括他自身占用内存的大小,也包括所有被它直接或间接引用的某些对象占用内存的大小。

图五使用Android Studio查看内存泄漏

Android Studio的分析不够强大,也可以借助MAT来分析内存泄漏:更多内容参考http://blog.csdn.net/cleverGump/article/details/52013873。

在链接内容中,可以关注下GIMP相关的内容,因为在APP中因为内存泄漏引起OOM一般会跟图片有关,其他对象往往没有bitmap对象大,所以解决图片相关的内存泄漏是优先级非常高的。

篇幅有限,还有很多深入的内容无法一一铺陈,后续将继续深入学习内存泄漏测试的相关内容。

关注微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!

这里写图片描述

这篇关于【腾讯TMQ】【Android场景化性能测试】内存性能及内存泄漏篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/902080

相关文章

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

Java使用MethodHandle来替代反射,提高性能问题

《Java使用MethodHandle来替代反射,提高性能问题》:本文主要介绍Java使用MethodHandle来替代反射,提高性能问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录一、认识MethodHandle1、简介2、使用方式3、与反射的区别二、示例1、基本使用2、(重要)

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参