概念: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…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
