移动端性能专项测试之内存 - 进阶篇

news2024/11/24 8:36:15

在 Android 系统中内存作为重要的资源,一直是开发及测试关注的重点,内存不足或者内存资源滥用都会导致严重的问题。本篇文章将会从底层出发给大家介绍 OOM(Out Of Memory)和 LMK(Low Memory Killer)等内存相关的知识。

在 Android 系统架构中,进程可以大体分成两类,一类是 Native 进程,另外一类就是 Java 进程

Native进程

采用 C/C++ 实现,本质上是 Linux 进程,在/system/bin/目录下面的程序文件运行后都是以 native 进程形式存在的。

Java进程

Android 虚拟机(Dalvik 或者 ART)实例的 Linux 进程,进程的入口 main 函数为 Java 函数。Android 虚拟机实例的宿主进程是 fork()系统调用创建的 Linux 进程,所以每一个 Android 上的 Java 进程实际上就是一个 Linux 进程,只是进程中多了一个 Android 虚拟机实例。因此,Java 进程的内存分配比 native 进程复杂,Android 系统中的应用程序基本都是 Java 进程,如桌面、电话、联系人、状态栏等等。

01、Android 内存限制

Android 系统为每一个 App 设置了可使用的 Heap(堆内存)大小限制,可以进入到 shell 环境中,找到 build.prop 文件

cat /system/build.prop

dalvik.vm.heapstartsize=8m
app启动后, 系统分配给它的Heap初始大小. 随着App使用可增加
dalvik.vm.heapgrowthlimit=192m
默认情况下, App可使用的Heap的最大值, 超过这个值就会产生OOM
dalvik.vm.heapsize=512m
如果App的manifest文件中配置了largeHeap属性, 如下.则App可使用的Heap的最大值为此项设定值
dalvik.vm.heaptargetutilization=0.75
当前理想的堆内存利用率. GC后, Dalvik的Heap内存会进行相应的调整, 调整到当前存活的对象的大小和 / Heap大小 接近这个选项的值, 即这里的0.75. 注意, 这只是一个参考值.
dalvik.vm.heapminfree=2m
单次Heap内存调整的最小值
dalvik.vm.heapmaxfree=8m
单次Heap内存调整的最大值

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a 

02、LMK(Low Memory Killer)

在用户空间中指定了一组内存临界值,当其中的某个值与进程描述中的 oom_adj 值在同一范围时,该进程将被 Kill 掉。如果你的 APP 某个进程需要一直保存存活,你需要保持你的进程优先级足够高,并且占用比较小,因为 Low Memory Killer 在工作时,同一优先级的进程会先 kill 那个占用最大的。性能测试时主要关注待机时的内存是不是够小。

Low Memory Killer 的工作可能致系统变卡。为什么呢?因为它 kill 了一些进程,然而现在市面的很多 APP 为了保活都会自启,刚刚被 kill,立刻又起来。启动占用大量内存(还有 CPU),又触发 Low Memory Killer。频繁的被 kill 和启动形成了恶性循环,so…系统变的很卡。

03、OOM 与 LMK 关系

Google 为什么设定当 Java 进程申请的 Java 空间超过阈值时,就抛出 OOM 异常?

  • 为了让 Android 系统能同时让比较多的进程常驻内存,这样程序启动时就不用每次都重新加载到内存,能够给用户更快的响应。

  • 程序发生 OOM 并不表示 RAM 不足,而是因为程序申请的 Java heap 对象超过了虚拟机配置的 heapgrowthlimit。也就是说,在 RAM 充足的情况下,也可能发生 OOM。

如果 RAM 真的不足,会发生什么呢?

  • 这时 Android 的 memory killer(LMK)会起作用,当 RAM 所剩不多时,memory killer 会杀死一些优先级比较低的进程来释放物理内存,让高优先级程序得到更多的内存。

ps:可以通过 adb shell cat /proc/meminfo 查看 RAM 的使用情况。

04、绕过 dalvikvm heapsize 的限制

对于一些大型的应用程序(比如游戏),内存使用会比较多,很容易超出虚拟机 heapsize 的限制,这时怎么保证程序不会因为 OOM 而崩溃呢?

  • 创建子进程
    创建一个新的进程,那么我们就可以把一些对象分配到新进程的 heap 上了,从而达到一个应用程序使用更多的内存的目的,当然,创建子进程会增加系统开销,而且并不是所有应用程序都适合这样做,视需求而定。

  • 使用 jni 在 native heap 上申请空间

    native heap 的增长并不受 dalvik vm heapsize 的限制,只要 RAM 有剩余空间,程序员可以一直在 native heap 上申请空间,当然如果 RAM 快耗尽,LMK 会杀进程释放 RAM。大家使用一些软件时,有时候会闪退,就可能是软件在 native 层申请了比较多的内存导致的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python趣味编程-使用 Tkinter 进行 RPS 游戏

使用 Tkinter 的 RPS 游戏是用Python编程语言编码的应用程序。该项目使用 tkinter 库来显示游戏应用程序的 GUI。游戏机制包括选择一个符号来击败对手。在 Python 中使用 Tkinter 的 RPS 游戏是一种基于随机机会的游戏,您通过简单的运气获胜。这个使用 Tkinter 的 RPS 游戏可以…

基于SSM的化妆品购物商城/美妆销售系统

基于基于SSMVue的化妆品购物商城/美妆销售系统~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 商品详情 购物车 个人中心 登录界面 管理员界面 摘要 基于SSM的化…

全球30米SRTM高程DEM数据详解

如果你在工作或学习中需要用到30米高程DEM数据,我们可以免费为你提供一个省的高程DEM数据。 你只需要通过关注“水经注GIS”,并在后台回复“免费数据”进群后即可获取下载地址。 这里,我们为大家分享一下全球30米SRTM高程DEM数据的相关参数…

【C#学习笔记】事件

前言 在之前我学习委托的时候,写到了 学习了委托,事件其实也就学习了,事件和委托基本上一模一样: 然而在实际工作中通过对事件的深入学习后发现,实际上事件的使用比委托要严格一些,本节将详细讲解事件的使…

Android 深色模式切换适配

在Android11上测试 1&#xff0c;把需要适配的资源文件复制一份后缀加上-night&#xff0c;里面就放置变主题后的资源 2&#xff0c;两个主题一个白&#xff0c;一个黑&#xff0c;分别放置在对应的valuse-styles.xml中 <style name"Theme.LaserMachPor" parent&…

MATLAB / Simulink HDL 快速入门

MATLAB / Simulink HDL 快速入门 我们将使用实例讲解MATLAB / Simulink HDL 使用入门。 开始这个项目&#xff0c;首先需要创建一个包含 Stateflow 的新 Simulink 。只需单击画布中的任意位置并开始输入 Stateflow。 此时应该能在画布上看到 Stateflow 图标。双击图标进行编辑。…

埃安AION V Plus 80星辰版:纯电家庭SUV市场的新续航里程碑

埃安汽车全新AION V Plus 80星辰版上市&#xff1a;定位600km续航家庭SUV&#xff0c;亲民价引领市场新趋势 埃安汽车宣布其全新车型——AION V Plus 80星辰版正式上市&#xff0c;以18.59万元的竞争性价格和超过600公里的续航力&#xff0c;响应了中国家庭对于多功能、…

微软Azure OpenAI申请和使用教程

新版已增加微软Azure OpenAI接口,申请教程对照如下 一、申请使用Azure OpenAI服务 二、配置Azure OpenAI 打开这个页面:https://portal.azure.com/?quickstart=true#create/Microsoft.CognitiveServicesOpenAI 进入 Azure 后,直接搜索OpenAI 若是已经通过,这里即可选择订阅…

C语言实现输入 n 个字符串,将它们按字母由小到大的顺序排列并输出

完整代码&#xff1a; // 输入 n 个字符串&#xff0c;将它们按字母由小到大的顺序排列并输出 #include<stdio.h> #include<stdlib.h> //字符串的最大长度 #define N 20//交换两个字符串在数组中的位置 void swap(char **str1,char **str2){char *temp*str1;*str1…

【数字图像处理-TUST】实验二-图像噪声生成与滤波降噪

一&#xff0c;题目 读入一幅图像使用两种以上的方法向图像中分别添加噪声输出一幅二值图像&#xff0c;背景为黑色&#xff0c;噪声区域为白色使用三种滤波方法对上述添加了噪声的图像进行降噪处理输出降噪处理后的结果图像 二&#xff0c;实验原理 采用了两种方法添加了噪…

7.现代卷积神经网络3-GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 深度卷积神经网络 AlexNet一、AlexNet1、AlexNet2、机器学习3、几何学4、特征工程5、HardWare6、数据集7、AlexNet的改进的地方8、AlexNet架构-卷积池化9、AlexNet架构-卷积池化10、AlexNet架构-全连接层11、更多改变细…

Oracle 三种分页方法(rownum、offset和fetch、row_number() over())

Oracle的三种分页指的是在进行分页查询时&#xff0c;使用三种不同的方式来实现分页效果&#xff0c;分别是使用rownum、使用offset和fetch、使用row_number() over() 1、使用rownum rownum是oracle中一个伪劣&#xff0c;它用于表示返回的行的序号。使用rownum进行分页查询的方…

华为交换机忘记console密码怎么办?

console线RJ45头 连接交换机console口&#xff0c;usb接口连接电脑电脑桌面计算机右键-》管理&#xff0c;端口查看端口是com几 3打开secureCRT 点击第二个图标&#xff0c;快速连接&#xff0c;然后设置下参数&#xff0c;如下图 4、重启交换机 5、看到如下图提示信息&#x…

Window下安装 Mongodb,并实现单点事务

在window操作系统下安装Mongodb&#xff0c;并让单点mongodb支持事务&#xff0c;mongodb5以上时才支持事务&#xff0c;所以必须时mongodb5及以上版本才支持。 1、下载mongodb安装文件 &#xff08;1&#xff09; 下载mongodb msi 安装文件 地址&#xff1a;mongocommunity &…

研发项目管理改进方法有哪些

研发项目管理改进方法有哪些 1.多项目协同管理 有可视化的项目进度管理环境&#xff0c;可通过表格视图或施工进度表&#xff0c;项目成员可以共同进行实时项目计划的编制。可以修改项目的任务约束、重大事件以及开始结束日期。还可进行任务分解、任务约束、不限层任务树、任务…

秒懂!用这10款思维导图软件,让头脑风暴如虎添翼!

世界上最糟糕的感觉之一就是忘记了一个伟大的点子。原本你只需把它记下来&#xff0c;但你当时确信自己绝不会忘记如此引人入胜的事物。然而&#xff0c;当这个想法从你的脑海彻底消失时&#xff0c;分分钟会让人崩溃。 如果你的想法有很多组成部分&#xff0c;比如一个大项目…

ChatGPT已经不知不觉改变了我的生活

文章目录 前言GPT技术的广泛应用内容创作智能助手教育和知识分享 机遇与挑战机遇挑战 总结 前言 近年来&#xff0c;自然语言处理技术的巨大进步已经催生了一系列GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型&#xff0c;如ChatGPT、文心一言、C知道等…

AI生图王者之战!深度体验实测,谁是真正的艺术家?

10月11日凌晨&#xff0c;设计软件巨头Adobe宣布推出一系列图像生成模型&#xff0c;其中Firefly Image 2作为新一代图像生成器&#xff0c;通过改善皮肤、头发、眼睛、手和身体结构增强了人体渲染质量&#xff0c;提供更好的色彩和改进的动态范围&#xff0c;并为用户提供更大…

C# Onnx DirectMHP 全范围角度2D多人头部姿势估计

效果 项目 代码 using Microsoft.ML.OnnxRuntime.Tensors; using Microsoft.ML.OnnxRuntime; using OpenCvSharp; using System; using System.Collections.Generic; using System.Windows.Forms; using System.Linq; using System.Numerics;namespace Onnx_Demo {public part…