概念:CPU、内存、磁盘、Android内存分配
cpu
CPU的全称是Central Processing Unit,中文名称为中央处理单元。它是计算机硬件的核心部件,负责解释计算机程序指令并处理计算机软件中的数据。简言之,CPU执行计算机程序中的操作指令,包括基本算术、逻辑、控制和输入/输出(I/O)操作指令。
CPU的主要组成部分通常包括:
算术逻辑单元(ALU):执行数学运算和逻辑操作。
控制单元(CU):解释程序指令并控制其他硬件组件响应这些指令。
寄存器:提供存储CPU正在处理的指令和数据的极小但非常快速的内存。
随着技术的发展,现代CPU采用多核心设计,其中每个核心可以独立执行指令,提高了处理速度和效率。此外,一些CPU还集成了其他功能,如图形处理单元(GPU)和缓存存储器,进一步提高了性能。
CPU的性能受多种因素影响,包括其时钟速度(以GHz或MHz计量)、核心数量、缓存大小、指令集类型以及制程技术等。在计算机体系结构中,CPU执行的每个指令周期通常涉及取指令、解码、执行和写回等步骤。
在广义上,CPU可以出现在不同种类的设备中,包括个人计算机、服务器、移动设备、嵌入式系统等。
内存(RAM):
RAM的全称是Random Access Memory,中文意思是随机存取存储器。
内存是一种易失性存储设备,意味着当电源关闭时,它里面存储的所有信息会丢失。
内存用于存储当前运行的程序和程序需要立即访问的数据。
它的访问速度非常快,可以快速读写,是CPU直接访问数据和运行程序的地方。
磁盘存储(硬盘或固态硬盘):
磁盘存储是持久性存储设备,数据在没有电源的情况下也能被保存。
它用来长期存储数据,比如操作系统、应用程序文件、用户文档等。
磁盘的访问速度通常比内存慢,但它们提供了更大的存储容量。
CPU 和内存之间的关系
CPU(中央处理单元)和内存(主要指随机访问存储器,RAM)是计算机的两个核心组件,它们之间的关系至关重要,共同负责处理和执行计算任务。
以下是CPU和内存之间的关系和互动方式:
存储程序概念
现代计算机基于存储程序概念,即指令和数据都存储在内存中。CPU执行指令时,首先需要从内存中读取指令和数据,然后进行处理。处理完成后,CPU会将结果写回内存。
数据交换
CPU和内存之间不断交换数据。CPU通过数据总线从内存读取数据和指令,处理后可能会立即使用结果或者将结果存储回内存。
速度差异
CPU的速度通常远高于内存的速度。为了弥补这种速度差异,计算机使用缓存(Cache)存储最近使用的数据。缓存是一种小容量但极高速的内存,位于CPU芯片上或者非常靠近CPU,这样可以减少CPU等待数据的时间。
运行程序
运行程序时,操作系统负责将程序的代码和数据加载到内存中。CPU从内存中获取这些代码和数据,进行解码和执行。
存储结构
内存是分层次的存储结构。除了RAM,还有寄存器(CPU内部、访问速度最快的存储单元)、一级和二级缓存、磁盘存储等。CPU在执行程序指令时,会利用这些层次结构、以及相关的硬件和算法,优化数据的检索和处理过程。
内存管理
CPU含有内存管理单元(MMU),它负责虚拟内存和物理内存之间的映射。它保证每个应用程序能得到足够的虚拟内存地址,并且为它们分配实际的物理内存空间。
同步
CPU和内存需保证同步,以确保数据的正确性。其中使用到的机制有内存屏障(Memory Barriers)、锁(Locks)以及其他同步指令。
总之,CPU是执行指令和处理数据的地方,而内存是存储运行中程序的指令和数据的地方。CPU利用其内部的计算核心来执行运算和逻辑操作,内存则按照CPU的请求提供指令和数据。两者的良好协同工作对于提高计算机的性能至关重要。
Android内存分配
当一个Android应用启动时,Android操作系统会给它分配一定量的内存,这个过程是由Android运行时环境管理的。每个应用运行在它自己的沙盒环境中,拥有独立的内存空间,这样可以保障应用之间的安全性和隔离性。
应用的内存主要分为几个部分:
堆内存:这是应用存储动态分配的对象的地方。每个应用都有一个堆内存限制,这个限制取决于设备的内存大小和系统的当前状态。
原生堆内存:用于存储由原生代码分配的内存,比如使用NDK开发的应用或库。
代码内存:存储应用的代码和其他可执行文件。
栈内存:用于线程执行,存儲函数调用的参数和局部变量。
Android系统会监视每个应用使用的内存量,并通过一个称为低内存杀手(Low Memory Killer)的机制,在系统内存不足的情况下回收内存。处于后台的应用更有可能被杀掉来回收其占用的内存。
Android虚拟机运行在内存上
确实,Android虚拟机(如Dalvik虚拟机或ART:Android Runtime)运行在设备的内存中。它负责执行编译后的应用程序代码(DEX文件),并提供垃圾收集、内存分配、线程管理等运行时功能。
当应用程序运行时,它的DEX文件被加载到内存中,虚拟机会解释和执行这些代码。同时,虚拟机还要负责将这些代码里的对象和数据存储在堆内存中,并管理它们的生命周期。
总结来说,Android虚拟机是一个软件层,它运行在操作系统之上,负责管理应用的代码执行和内存分配。内存(RAM)是存储当前正在使用的信息的设备,它和磁盘存储(用于长期存储)是不同的。应用的内存分配由Android运行时环境进行管理,以保证应用运行效率和系统稳定性。
为什么在Android设备上容易发生OOM
有限的RAM: 相较于存储空间,RAM相对较小。许多中低端Android设备尤其容易因为有限的RAM(例如2GB或4GB)而面临内存不足的情况。
多任务: Android系统同时运行多个应用程序和后台服务。每个应用程序和服务都需要占用一定的RAM,多任务运行会大量消耗可用内存。
应用程序内存管理: 并非所有应用程序都优化了它们的内存使用。一些应用可能因为保留太多不再需要的数据,或是因为内存泄漏(即应用程序未能释放不再使用的内存),而导致过度占用内存。
大媒体文件: 图像、视频和其他媒体文件尤其是在高分辨率处理时,会消耗大量RAM。例如,加载和处理高分辨率图片时,可能需要为每个像素分配内存,这会迅速消耗可用内存资源。
如何应对内存溢出
优化应用程序: 应用开发者需要优化内存使用,例如通过有效的内存管理和清理,避免保留不需要的对象引用,使用内存友好的数据结构和算法。
减少并发运行的应用: 用户可以通过关闭不需要的应用以释放RAM。
使用相应的内存优化工具和库: 开发者可以使用Android Studio的Profile工具来监视和优化应用的内存使用,以及利用Android框架提供的各种内存优化和图片加载库(如Glide、Picasso)来减少内存占用。
内存分页和压缩: 一些Android设备可能会使用内存分页(Swapping)和压缩技术来扩展可用的RAM容量,尽管这样做会增加CPU的负担,可能导致系统在内存非常紧张时运行较慢。
总而言之,内存管理在确保Android设备性能的同时,也是维持良好用户体验的关键。无论是开发者优化他们的应用程序以减轻内存负担,还是用户通过管理运行应用的方式来节约内存,这些都是确保设备流畅运行的有效方式。
相关文章:

概念:CPU、内存、磁盘、Android内存分配
cpu CPU的全称是Central Processing Unit,中文名称为中央处理单元。它是计算机硬件的核心部件,负责解释计算机程序指令并处理计算机软件中的数据。简言之,CPU执行计算机程序中的操作指令,包括基本算术、逻辑、控制和输入/输出&am…...

Vue 图片加载失败显示默认图片
方法一:通过onerror属性加载默认图片 <img :src"img" :onerror"defaultImg" /><script> export default {data() {return {img: , // 访问图片的ip地址defaultImg: this.src ${require(/assets/images/right/default-person.png)…...

【Sentinel的限流使用】⭐️SpringBoot整合Sentinel实现Api的限流
目录 前言 一、Sentinel下载 二、SpringBoot 整合 Sentinel 三、流控规则 章末 前言 小伙伴们大家好,上次使用OpenFeign时用到了 Hystrix实现熔断和限流的功能,但是发现该工具已经停止维护了,于是想到了Spring Cloud Alibaba开发的Sentin…...

【示例】MySQL-SQL语句优化
前言 本文主要讲述不同SQL语句的优化策略。 SQL | DML语句 insert语句 插入数据的时候,改为批量插入 插入数据的时候,按照主键顺序插入 大批量插入数据的时候(百万),用load指令,从本地文件载入&#x…...

QT 线程的使用
1.头文件: #include<QThread> 2.在.h文件中定义全局: QThread* threadTraj; void threadTrajProcess();//回调函数 3.在.cpp文件中: threadTraj new QThread();//初始化 //连接槽函数 QObject::connect(threadTraj, &QThre…...

Python基于flask的豆瓣电影分析可视化系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

【迅为iTOP-4412-linux 系统制作(4)】ADB 或者 TF 卡烧写测试
准备工作 编译生成的内核镜像uImage 和设备树 dtb 文件“exynos4412-itop-elite.dtb”已经可以使用了。 把编译生成的uimage和dtb文件。拷贝fastboot工具。官方的u-boot-iTOP-4412.bin 也拷贝到 platform-tools 文件夹目录内。system.img 也拷贝到 platform-tools 文件夹目录…...

阿里云对象存储OSS批量上传,单个上传,批量删除,单个删除!
请自行替换秘钥: #阿里云 OSS src/main/resources/application.properties #不同的服务器,地址不同 aliyun.oss.file.endpointhttps://oss-cn-hangzhou.aliyuncs.com aliyun.oss.file.accessKeyIdLTAI5t9wUqCoD42qPGRy8S aliyun.oss.file.accessKeySecre…...

Python的国际化和本地化【第162篇—国际化和本地化】
👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着全球化的发展,多语言支持在软件开发中变得越来越重要。Python作为一种流行的…...

播放Samba协议下的音视频文件
Samba(也被称为SMB/CIFS)是一个用于在局域网内共享文件和打印服务的协议,广泛应用于Windows和Linux系统之间的文件共享。 一、展示Samba服务器下的文件 使用如jcifs这样的Java库来在安卓应用中集成SMB/CIFS客户端功能。这个库提供了与SMB/CI…...

Excel全套213集教程
Excel全套213集教程 包含技术入门93集 图表17集 数据透视35集 公式函数68 基础入门 93节 https://www.alipan.com/s/cMxuPstkS1x 提取码: 77dd 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视…...

【七 (1)指标体系建设-构建高效的故障管理指标体系】
目录 文章导航一、故障概述1、故障:2、故障管理: 二、指标体系概述1、指标2、指标体系 三、指标体系构建难点1、管理视角2、业务视角3、技术视角 四、指标体系构建原则1、与战略目标对齐2、综合和平衡3、数据可获得性4、可操作性5、具体和可衡量6、参与和…...

Go gin框架(详细版)
目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go 改动的地方 index.html 改动的地方 style.css 改动…...

Git分布式版本控制系统——Git常用命令(二)
五、Git常用命令————分支操作 同一个仓库可以有多个分支,各个分支相互独立,互不干扰 分支的相关命令,具体如下: git branch 查看分支 git branch [name] 创建分支&#x…...

LeetCode 59.螺旋矩阵II
LeetCode 59.螺旋矩阵II 1、题目 力扣题目链接:59. 螺旋矩阵 II - 力扣(LeetCode) 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1࿱…...

03-JAVA设计模式-适配器模式
适配器模式 设么是适配器模式 它属于结构型模式,主要用于将一个类的接口转换成客户端所期望的另一种接口,从而使得原本由于接口不兼容而无法协同工作的类能够一起工作。 适配器模式主要解决的是不兼容接口的问题。在软件开发中,经常会有这…...

MVVM架构模式
目录 MVVM 数据绑定方式 实现方式 Model View ViewModel 数据绑定方式 vue:: 数据劫持和发布-订阅模式: Object.defineProperty() 方法来劫持(监控)各属性的 getter 、setter ,并在数据(对…...

leetcode2924--找到冠军II
1. 题意 给定一个有向无环图,方向表示胜负关系;求最后胜出的人。 2. 题解 将所有人标记为胜者,统计出度去掉对应胜者标记; 最后统计胜者数目,是否大于1,若大于1,则没有胜者,否则…...

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记13:RTC实时时钟
系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…...

统一用安卓Studio修改项目包名
可以逃跑,可以哭泣,但不可以放弃 --《鬼灭之刃》 修改项目包名 1)选中项目中药修改的包名: 2)目结构显示方式,取消 Compact Middle Packages 选项; 3)右键要修改的包名,选择 Refactor —— Re…...

Spring Cloud Gateway详细介绍以及实现动态路由
一. 简介 Spring Cloud Gateway This project provides a libraries for building an API Gateway on top of Spring WebFlux or Spring WebMVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to …...

transformer上手(6)—— 微调预训练模型
1 加载数据集 以同义句判断任务为例(每次输入两个句子,判断它们是否为同义句),构建我们的第一个 Transformers 模型。我们选择蚂蚁金融语义相似度数据集 AFQMC 作为语料,它提供了官方的数据划分,训练集 / …...

web前端框架设计第四课-条件判断与列表渲染
web前端框架设计第四课-条件判断与列表渲染 一.预习笔记 1.条件判断 1-1:v-if指令:根据表达式的值来判断是否输出DOM元素 1-2:template中使用v-if 1-3:v-else 1-4:v-else-if 1-5:v-show(不支…...

计算机网络:数据链路层 - CSMA/CD协议
计算机网络:数据链路层 - CSMA/CD协议 媒体接入控制CSMA/CD协议截断二进制指数退避算法帧长与帧间间隔信道利用率 媒体接入控制 如图所示,这是一根同轴电缆,有多台主机连接到这根同轴电缆上,他们共享这根传输媒体,形成…...

力扣LeetCode138. 复制带随机指针的链表 两种解法(C语言实现)
目录 题目链接 题目分析 题目定位: 解题思路 解题思路1(粗暴但是复杂度高) 解题思路2(巧妙并且复杂度低) 题目链接 138. 复制带随机指针的链表https://leetcode-cn.com/problems/copy-list-with-random-pointer/ …...

强大的压缩和解压缩工具 Keka for Mac
Keka for Mac是一款功能强大的压缩和解压缩工具,专为Mac用户设计。它支持多种压缩格式,包括7z、Zip、Tar、Gzip和Bzip2等,无论是发送电子邮件、备份文件还是节省磁盘空间,Keka都能轻松满足用户需求。 这款软件的操作简单直观&…...

论文速读:Do Generated Data Always Help Contrastive Learning?
在对比学习领域,最近很多研究利用高质量生成模型来提升对比学习 给定一个未标记的数据集,在其上训练一个生成模型来生成大量的合成样本,然后在真实数据和生成数据的组合上执行对比学习这种使用生成数据的最简单方式被称为“数据膨胀”这与数据…...

华为欧拉系统(openEuler-22.03)安装深信服EasyConnect软件(图文详解)
欧拉镜像下载安装 iso镜像官网下载地址 选择最小化安装,标准模式 换华为镜像源 更换华为镜像站,加速下载: sed -i "s#http://repo.openeuler.org#https://mirrors.huaweicloud.com/openeuler#g" /etc/yum.repos.d/openEuler.r…...

git commit --amend用法
一、git commit --amend 修改提交信息:您可以使用 git commit --amend 命令来修改最新提交的提交信息。执行该命令后,Git 将会打开文本编辑器(通常是的默认文本编辑器),以便编辑提交信息。完成编辑后保存并关闭编辑器…...

分布式系统:缓存与数据库一致性问题
前言 缓存设计是应用系统设计中重要的一环,是通过空间换取时间的一种策略,达到高性能访问数据的目的;但是缓存的数据并不是时刻存在内存中,当数据发生变化时,如何与数据库中的数据保持一致,以满足业务系统…...