android 测试 内存,从 Android测试体系之内存篇

cf6f151f6c7bf725321fa109895f3fa6.png

一、引言

相信很多小伙伴在做Android App测试的时候都遇到过这些情况:App Crash了、APP由于内存暴涨导致OOM了、APP运行卡顿不流畅了、APP流量电量耗费过快了等。我们如何在测试阶段及时的发现并定位问题的原因呢?正所谓工欲善其事必先利其器,要解决这些问题,我们必须要利其器,而且要全方位的利:功能测试、性能测试、自动化测试、兼容性测试、安全测试、覆盖率测试,一个都不能少。今天我们就先从性能测试的内存谈起,以后也会逐步完善这一系列的其他部分。

二、基本概念

在开始我们的内存测试之前,先不要着急,让我们从最开始的地方出发,一步一步的弄清楚我们要测什么、怎么测、以及如何分析。首先了解一些相关的基本概念吧。既然我们是在Android系统上做内存测试,那么就先从Android系统的分层架构谈起吧。

1.Android分层架构

Android的系统从上层到底层共包括四层,分别是应用程序层、应用框架层、系统库和Android运行时和Linux内核层。

1)应用层主要是提供核心应用程序包,如发邮件,日历等,由java语言实现;

2)应用框架,包括窗口管理器,内容提供者,视图系统等,开发可以访问提问的api进行程序设计,由java语言实现;

3)系统库和Android运行时也叫native层,主要是本地服务和链接库,包含了java语言所需要调用的函数和虚拟机等,c或者c++实现效率高;

4)linux内核,提供相应的协议和驱动。

640a4e6f5d426631f5a786d6ba0af71b.png

那这跟我们的内存测试有什么关系呢?请大家注意上图中的dalvik virtual matchine,这是个什么东西呢,通常我们简写为DVM,现在大家是不是觉得熟悉多了,就是Android虚拟机,是Android系统中java 虚拟机,我们的程序就运行在这里面。看来我们还有必要了解一下JVM的内存模型。

2.JVM内存模型

我们一起来看一下java虚拟机的内存区域都有哪几部分:

1)方法区:用于存储已被虚拟机加载的类信息、常量、静态常量、即时编译器编译后的代码等数据。

2)程序计数器:当前线程所执行的字节码的行号指示器。

3)stack:当方法被执行时,存放函数地址、参数、局部变量、对象的引用,在方法执行结束时会自动释放,由操作系统负责

4)heap:程序运行时直接 new 出来的内存(对象实例)。这部分内存在不使用时将会由 Java 垃圾回收器来负责回收。

210951ef64de3de82473feabf784d3fd.png

了解完以上的概念之后,相信大家不难得出结论,我们做Android内存测试,就是测dalvik虚拟机里的heap嘛。在这里我必须承认大家真的是很机智,因为我们几乎已经要找到答案了,但是现实往往都很残酷,我们越是接近真相的时候越要加倍的小心,才能不会前功尽弃。为什么这么说呢,首先有一点是很正确的,我们在做内存测试的时候,确实几乎可以等同于在做heap的大小测试,但是并不仅仅只有java虚拟机里面的heap。从上面的Android分层架构模型中,我们知道dalvik虚拟机只是其中的一部分,并不是孙猴子一样跳出三界外,不在五行中呀,怎么可能不跟其他部分打交道呢,所以除了虚拟机里面的heap,还有native heap。

......

本文出自《51测试天地》原创测试文章系列(四十二)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值