Android中的内存管理

这篇具有很好参考价值的文章主要介绍了Android中的内存管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.内存管理机制概述

1.分配机制:

安卓系统会为每个进程合理的分配内存,从而保证每个进程能正常运行。而不至于内存不够使用或者每个进程占用太多的内存。

2.回收机制

操作系统在内存不足的时候,它会有一个合理的回收和再分配的机制。

从而保证新的进程能够正常运行。回收的时候就可能杀死那些正在占用内存的进程。所以操作系统需要有一个合理的杀死占用内存的进程的机制,以保证把副作用降到最低。

二。安卓内存管理机制

1.分配机制

安卓采用弹性内存分配机制。也就是说一开始并不会分配太多的内存。而是给每一个APP的进程分配一个小额的量。这个小额的量跟手机的内存大小有关。

当进程内存不够的时候,安卓会再分配一些内存给各个进程。但是这个内存大小不是随意的,他是有限度的。操作系统也想让更多的进程存活。这样用户打开进程的时候不用重新创建,只用恢复就行。

2.回收机制

安卓对于进程的分类是有优先级的。对进程进行了分类,主要分为这样5大类。

1.前台进程

也就是在屏幕当前显示的进程

2.可见进程

可见进程也就是说,前台进程他已经不再属于前台了。但是用户仍能看到的进程。

3.服务进程

开启一些服务,比如推送,定位等等。

4.后台进程

后台进程不同于服务进程。他会在后台进行一些计算。

5.空进程

没有任何东西在运行的进程。内存可以随时把他回收掉。

那么安卓为什么要搞这个分级呢?因为级别越低,被系统杀死回收的可能性越大。

这里我们注意,前台进程,可见进程,服务进程,正常情况下他是绝对不会被杀死和回收的。

而后台进程存到一个缓存列表中,这个缓存列表是LRU结构,也就是最近最少使用。

而空进程是为了平衡整个系统性。安卓不会保存这个进程。

安卓在开始杀死进程的时候,系统会判断杀死这个进程所带来的效益。

安卓总是更倾向于杀死能回收更多内存的进程。

三。内存管理机制的特点

我们可以理解为系统的内存管理目标

1、占用更少的内存

2、在合适的时候,合理的释放内存资源。

3.在系统内存紧张的情况下,能释放掉大部分不重要的资源。来为android系统提供可用的内存。

4.能够很合理的在特殊生命周期中,保存或者还原重要数据,以至于系统能够正确的重新恢复该应用。

四。内存优化的方法

1.当service完成后,尽量停止他。

可以用intentservice代替service。

因为intentservice可以在intenthandler方法中执行耗时任务,而且在运行完成后,会自动退出。

2.在UI不可见的时候,释放掉一些只有UI使用的资源。

3.在系统内存紧张的时候,尽可能多的释放掉一些非重要的资源。

4.避免滥用Bitmap造成的内存浪费。

5.使用针对内存优化过的数据容器。

6.避免使用依赖注入的框架。

7.使用zip对齐的APK

8.使用多进程。文章来源地址https://www.toymoban.com/news/detail-471717.html

到了这里,关于Android中的内存管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++内存管理机制(侯捷)笔记2

    本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C++内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 下面是第二讲allocator具体实现的笔记。 VC6下的malloc内存块布局:从上往下分别是cookie,debug header, 实际数据的bl

    2024年01月23日
    浏览(50)
  • C++内存管理机制(侯捷)笔记3

    本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C++内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 第三讲:malloc和free VC6 内存分配 SBH:Small Block Heap 下图是call stack,调用栈,从下往上看。 mainCRTStartup函数是CRT(

    2024年01月22日
    浏览(41)
  • 数据结构之动态内存管理机制

      目录 数据结构之动态内存管理机制 占用块和空闲块 系统的内存管理 可利用空间表 分配存储空间的方式 空间分配与回收过程产生的问题 边界标识法管理动态内存 分配算法 回收算法 伙伴系统管理动态内存 可利用空间表中结点构成 分配算法 回收算法 总结 无用单元收集(

    2024年02月12日
    浏览(41)
  • C++内存管理机制(侯捷)笔记4(完结)

    本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C++内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 下面是第四讲和第五讲的笔记。 第四讲:loki库的allocator 第五讲:other issues,主要介绍GNU C++提供的其他分配器的

    2024年02月02日
    浏览(40)
  • 深入浅出:Python内存管理机制详解

    随机存取存储器(Random Access Memory,RAM) :是计算机中用于临时存储数据的一种硬件组件。它是计算机的主要内存之一,用于存储正在运行的程序和操作系统所需的数据。 主要特点: 临时存储 :RAM 存储的数据是临时的,意味着当计算机关闭或重启时,其中的数据会被清空。

    2024年02月04日
    浏览(43)
  • 吃透进程地址空间,理清OS内存管理机制

    Hello,大家好。本文要给大家带来的是有关Linux中的进程地址空间的讲解 首先我们来看着一张图,相信有学习过 C/C++内存管理 的同学一定可以清楚下面的这张图。知道内存中划分了很多的区域,包括 栈区、堆区、静态区、只读常量区、代码段、共享区等等 。 但是呢却不知道

    2024年02月08日
    浏览(45)
  • [javascript核心-08] V8 内存管理机制及性能优化

    V8 本身也是程序,它本身也会申请内存,它申请的内存称为常驻内存,而它又将内存分为堆和栈 栈内存介绍 栈用于存放JS 中的基本类型和引用类型指针 栈空间是连续的,增加删除只需要移动指针,操作速度很快 栈空间是有限的,若超出栈空间内存,会抛出栈空间溢出错误

    2024年02月16日
    浏览(59)
  • 【c/c++】深入探秘:C++内存管理的机制

    🔥个人主页 : Quitecoder 🔥 专栏 : c++笔记仓 朋友们大家好,本篇文章我们详细讲解c++中的动态内存管理 我们来看内存区域划分 数据段就是我们所说的 全局变量 ,代码段是我们所说的 常量区 ,我们需要重点关注的是 堆区 ,这部分是由我们自己控制的 我们来依次讨论:

    2024年04月16日
    浏览(34)
  • 关于js的内存管理和垃圾回收机制的理解

    js的内存管理: 内存管理,顾名思义,js在创建变量时,会在内存中分配空间,来储存新增的变量,其中有两种方式, 1:基本类型,系统会在内存中分配实实在在的内存空间,来存放新增的变量,存储的数据结构为栈 2:引用类型,函数,对象等,系统也会在内存中分配空间

    2024年02月11日
    浏览(43)
  • 深入探讨Java虚拟机(JVM):执行流程、内存管理和垃圾回收机制

    目录 什么是JVM? JVM 执行流程 JVM 运行时数据区 堆(线程共享) Java虚拟机栈(线程私有) 什么是线程私有? 程序计数器(线程私有) 方法区(线程共享) JDK 1.8 元空间的变化 运行时常量池 内存布局中的异常问题 1.  Java堆溢出 2.  虚拟机栈和本地方法栈溢出 JVM 类加载 1.

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包