Android低内存设备系统优化

切记,所有的优化都遵循一条准则:

        空间换时间,时间换空间。

一、前言

        我们为什么会觉得卡顿、不流畅?

        卡顿等性能问题的最主要根源都是因为渲染性能,Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。

        

        如果你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,这样就发生了丢帧现象。那么用户在32ms内看到的会是同一帧画面,在视觉上就会感到卡顿、不流畅。

        

        然而造成Android系统卡顿的原因有很多,主要包括以下三大类:

流程执行异常、系统负载异常、编译引起卡顿性能问题,所以今天分析一下系统负载异常中的低内存引起卡顿

二、理论分析

        我们都知道内存是一个重要的系统公共资源,系统内任何进程的正常运行都需要消耗一定的内存资源。一般来讲设备的RAM硬件物理内存的大小是固定且有限的,而系统内运行的所有进程都需要共享这些有限内存资源。如何用有限的内存资源去满足系统各个应用进程无限的需求,这就涉及到一个系统内存管理的逻辑。这是一个复杂的问题,几乎贯穿了整个Android系统的各个层级。从Linux内核到Art虚拟机,再到Framework框架,甚至到APP应用,都会有各自的内存管理的策略。

        所以合理的内存的分配与管理无论对系统和应用来讲都至关重要。因为内存问题既能引发稳定性问题,也能引发卡顿性能问题。下面我们分别来分析一下:

2.1内存引起的稳定性问题:

        因为系统总的内存资源是有限的,为了防止单个应用进程无限制的占用内存资源,Android系统设计了很多机制来遏制这种情况的产生。比如在虚拟机层面,谷歌设计对每个应用进程占用的DalvikHeap的内存大小做出了限制,超过一定的阈值,就会触发OutOfMemeory(OOM)的异常,导致应用进程崩溃。此外Android系统还引入了lmkd低内存守护机制,当系统总的可用内存低于一定的阈值,就会按照进程优先级,将占用内存比较大的应用进程杀掉。

        32位的应用虚拟内存的寻址空间最大为4G,当应用进程的虚拟内存占用超过4G时,就无法继续为其分配内存,产生OOM类型的报错,出现应用崩溃或黑屏等问题。

        另外Android系统基于Linux内核,也绩承了Linux系统对应用进程的相关限制。如果应用进程中开启的线程过多(每创建一个空线程也会有一定的内存开销),超过/proc/sys/kernel/threads-max中定义的上限,也会报出OOM异常导致应用进程崩溃;再比如应用进程中打开的文件句柄过多,超过/proc/pid/limits节点中的定义上限,也会报出OOM异常导致应用进程崩溃。如下图所示:

2

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

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

相关文章

springboot整合mybatis以及mybatis-plus 开发

一、springboot整合mybatis 1.注解版 1.1 导入坐标 <dependencies><!--mybatis坐标--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</…

【C++】使用红黑树封装map与set

文章目录 1. 源码分析2. 调整红黑树的结构搭建map、set3. 红黑树的迭代器3.1 普通迭代器3.2 const迭代器3.3 map的operator[ ] 4. 完整代码4.1 RBTree4.2 MyMap4.3 MySet 对于map与set&#xff0c;它们一个是KV模型&#xff0c;一个是K模型&#xff0c;那我们要写两个红黑树吗&…

TypeScript中的接口(Interface):对象类型的强大工具

目录 1. 接口的基本概念1.1 什么是接口?1.2 为什么使用接口? 2. 接口的基本语法2.1 定义接口2.2 使用接口 3. 接口的高级特性3.1 可选属性3.2 只读属性3.3 函数类型3.4 可索引类型 4. 接口的继承和实现4.1 接口继承4.2 类实现接口 5. 接口的高级用法5.1 混合类型5.2 接口合并…

虚幻5|角色武器装备的数据库学习(不只是用来装备武器,甚至是角色切换也很可能用到)

虚幻5|在连招基础上&#xff0c;给角色添加武器并添加刀光|在攻击的时候添加武器并返回背后&#xff08;第一部分&#xff0c;下一部分讲刀光&#xff09;_unreal 如何给角色添加攻击-CSDN博客 目的&#xff1a;捡起各种不同的武器&#xff0c;捡起的武器跟装备的武器相匹配 …

【Hot100】LeetCode—234. 回文链表

目录 1- 思路快慢指针链表拆分反转链表 2- 实现⭐234. 回文链表——题解思路 3- ACM 实现 原题连接&#xff1a;234. 回文链表 1- 思路 快慢指针链表拆分反转链表 思路 ①将链表拆分前后两个部分——>找拆分点、②反转后面部分、③根据反转结果&#xff0c;同时利用两个指…

代码随想录算法训练营第50天|98. 所有可达路径

打卡Day50 1. 图论理论基础2. 98. 所有可达路径3. 广度优先搜索理论基础 1. 图论理论基础 文档讲解&#xff1a; 代码随想录 度&#xff1a;无向图中有几条边连接该节点&#xff0c;该节点就有几度 在有向图中&#xff0c;每个节点有出度和入度&#xff0c;出度指从该节点出发…

MySQL笔记01: MySQL入门_1.3 MySQL启动停止与登录

1.3 MySQL启动停止与登录 1.3.1 MySQL启动与停止 MySQL数据库分为客户端和服务器端&#xff0c;只有服务器端服务开启以后&#xff0c;才可以通过客户端登录MySQL服务端。 首先&#xff0c;以管理员身份运行“命令提示符”&#xff1a; &#xff08;1&#xff09;启动MySQL服务…

HTTP范围放大攻击简记

HTTP范围放大攻击中的放大效应是通过滥用HTTP协议中的Range头字段来实现的。 HTTP Range请求的正常用途 HTTP Range头字段允许客户端请求特定字节范围的资源片段。这种功能主要用于以下场景&#xff1a; 断点续传&#xff1a;客户端可以在下载中断后只请求未完成部分&#x…

python井字棋游戏设计与实现

python实现井字棋游戏 游戏规则&#xff0c;有三个井字棋盘&#xff0c;看谁连成的直线棋盘多谁就获胜 棋盘的展现形式为 棋盘号ABC和位置数字1-9 输入A1 代表在A棋盘1号位数下棋 效果图如下 部分源码如下&#xff1a; 卫星工纵浩 白龙码程序设计&#xff0c;点 代码获取 …

海外短剧平台的局限性与优势:做平台还是选择CPS?

随着国内短剧市场的蓬勃发展&#xff0c;越来越多的目光开始聚焦在海外市场。不少企业和个人都看到了“文化输出”的巨大潜力&#xff0c;希望通过短剧这一形式&#xff0c;吸引海外的观众。然而&#xff0c;在进入海外市场时&#xff0c;我们面临着两种主要的选择&#xff1a;…

STM32 定时器 输入捕获

用于测频率测占空比 IC(Input Capture)输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变&#xff08;上升沿/下降沿&#xff09;时&#xff0c;会让当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数…

2024年入职/转行网络安全,该如何规划?_网络安全职业规划

前言 前段时间&#xff0c;知名机构麦可思研究院发布了 《2022年中国本科生就业报告》&#xff0c;其中详细列出近五年的本科绿牌专业&#xff0c;其中&#xff0c;信息安全位列第一。 网络安全前景 对于网络安全的发展与就业前景&#xff0c;想必无需我多言&#xff0c;作为…

制造企业为什么要数字化转型?面临哪些困难?

如何界定制造企业 制造业&#xff08;Manufacturing Industry&#xff09;是指机械工业时代利用某种资源&#xff08;物料、能源、设备、工具、资金、技术、信息和人力等&#xff09;&#xff0c;按照市场要求&#xff0c;通过制造过程&#xff0c;转化为可供人们使用和利用的…

坐牢第二十七天(聊天室)

基于UDP的网络聊天室 一.项目需求&#xff1a; 1.如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息 2.如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息 3.如果有人下线&#xff0c;其他用户可以收到这个人的下线信息 4.服务器可以发送系统信息…

8月16日笔记

只有DNS协议出网场景 DNS 协议是一种请求、应答协议&#xff0c;也是一种可用于应用层的隧道技术。DNS 隧道的工作原理很简单&#xff0c;在进行 DNS 查询时&#xff0c;如果查询的域名不在 DNS 服务器本机缓存中&#xff0c;就会访问互联网进行查询&#xff0c;然后返回结果。…

在Ubuntu 16.04上安装Jenkins的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Jenkins 是一个开源的自动化服务器&#xff0c;旨在自动化与软件持续集成和交付相关的重复技术任务。Jenkins 是基于 Java 的&…

Android架构组件:MVVM模式的实战应用

Android架构组件&#xff1a;MVVM模式的实战应用 在Android开发中&#xff0c;随着应用复杂性的增加&#xff0c;选择一个合适的架构模式变得尤为重要。MVVM&#xff08;Model-View-ViewModel&#xff09;模式作为一种现代且高效的软件架构模式&#xff0c;已被广泛应用于Andr…

linux下串口通信相关知识

三种工作模式 当ICANON 标志被设置时表示启用终端的规范模式&#xff0c;默认情况为规范模式。 规范模式下&#xff0c;所有的输入是基于行进行处理的。在用户输入一个行结束符&#xff08;回车符、EOF 等&#xff09;之前&#xff0c;系统调用read()函数是读不到用户输入的任…

JavaScript基础知识(三)

样式修改 元素.style是对象的一种格式,用于通过设置元素的相关行内样式来设置css,也可以选择相关关联的样式来修改元素相关的样式. 要注意的是,选择相关的样式的时候,样式名是采用小驼峰写法而非是全部小写的方式 类名 添加类名: 元素.classList.add("classname") …

单词搜索

单词搜索 完完全全自己调试修改debug出来的一题。 上代码&#xff1a; const int N 40;int st[N][N]; class Solution {void dfs(bool & ans,int i,int j,string word,int u,vector<vector<char>>& board){if(board[i][j]!word[u]) return;if(uword.siz…