iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >浅谈Android系统的基本体系结构与内存管理优化
  • 603
分享到

浅谈Android系统的基本体系结构与内存管理优化

优化内存管理Android 2022-06-06 09:06:49 603人浏览 薄情痞子
摘要

Android运行环境一览 Android基于linux内核,面向移动终端的操作系统。主要包括以下几个方面: Application Framework: 这一层为应用开发者提

Android运行环境一览
Android基于linux内核,面向移动终端的操作系统。主要包括以下几个方面:

Application Framework:
这一层为应用开发者提供了丰富的应用编程接口,如 Activity Manager,Content Provider,Notification Manager,以及各种窗口 Widget 资源等。所有的APP都是运行在这一层之上。
Dalvik 虚拟机
Dalvik VM采用寄存器架构,而不是JVM的栈架构,更适于移动设备。java源代码经过编译成为.class字节码文件,然后由谷歌提供的 dx工具将其转化为Dalvik可识别的.dex文件。
Linux kernel:
每个APP应用程序由一个独立的Dalvik VM来解释执行,而一个Dalvik VM实例对应一个linux内核进程。
所以说,每个APP之间完全隔离,资源独立。使得每个APP更加安全,但也不利于进程间通信

2016214165404123.png (572×114)

Android官方介绍

2016214165440699.png (486×740)

**Android 系统架构

Application framework
大部分开发者十分关心这一层。你必须要了解开发者会接触到的所有api接口,大部分接口都与硬件抽象层(HAL层)接口一一对应,而且它们会告诉你如何实现你自己的驱动。

Binder IPC
Binder进程间通信机制帮助Application framework层能够跨进程并且调用系统级服务。从根本上讲,它帮助高级别的framework的API接口与Android系统服务进行交互。

系统服务
大部分Application framework api具备的功能都要依靠与某种系统服务进行通信从而操作底层硬件。系统服务根据不同的功能分成了若干模块组件,例如Window Manager, Search Service, or Notification Manager。系统服务主要包含两大块:系统和媒体。前者对应的服务包含如Window Manager 或 Notification Manager,后者对应的服务都与播放或记录媒体有关。
硬件抽象层Hardware abstraction layer (HAL)
硬件抽象层可以作为一个标准接口让Android系统调用设备驱动层而不用管这些驱动和硬件时如何实现的。
![硬件驱动层相关组件]
Linux Kernel
大多数情况下,你自己开发设备驱动和开发linux设备驱动时一样的。Android挑选了一个特定的linux内核版本,这个版本包含了如wakelocks(一个内存管理系统),Binder IPC驱动和其他一些特征,这些特征对于像Android一样的移动嵌入式平台都非常重要。你也可以根据自己的需求选择合适的kernel版本,只要它能支持一些必要的属性如Binder IPC驱动等。但是,我们仍然推荐你使用最新版本的Android内核。具体可参考内核编译
相关知识点:
应用程序进程间隔离机制:
Android系统包括四层架构:从底层往上依次是Linux kernel层、C/C++函数库与Android运行时环境(Dalvik VM等)层、Android Framwork框架层、应用程序层。其中,Android运行时环境层类似Java里的JRE层,主要用来运行java程序,不过此处的虚拟机是Dalvik虚拟机。每一个Android应用程序都运行在单独的Davlik进程里,Dalvik虚拟机针对同时高效运行多个虚拟机而优化,在这一层实现了应用程序的进程间隔离。

Dalvik虚拟机与JVM区别:

JVM直接从.class或jar包中加载字节码解释运行,Dalvik通过DX工具将.class文件编译为.dex文件(Dalvik Executable)来运行。
JVM采用栈结构,而Dalvik采用寄存器结构,更适于移动设备。
为何Android要采用Dalvik虚拟机而不是JVM呢?

大多数虚拟机(包括JVM)都是基于栈的,而Dalvik虚拟机则是基于寄存器的,性能更好,不过也导致硬件通用性略差;
运行专有.dex文件。DX工具对.class文件编译时,去除里面的冗余信息,并把所有.class文件整合到一个文件中,提高了性能。同时DX工具还会对.dex文件进行性能优化

内存管理及优化
一、Android内存基础
物理内存与进程内存
物理内存即移动设备上的RAM,当启动一个Android程序时,会启动一个Dalvik VM进程,系统会给它分配固定的内存空间(16M,32M不定),这块内存空间会映射到RAM上某个区域。然后这个Android程序就会运行在这块空间上。Java里会将这块空间分成Stack栈内存和Heap堆内存。stack里存放对象的引用,heap里存放实际对象数据。
在程序运行中会创建对象,如果未合理管理内存,比如不及时回收无效空间就会造成内存泄露,严重的话可能导致使用内存超过系统分配内存,即内存溢出OOM,导致程序卡顿甚至直接退出。

内存泄露(Memory Leak)
Java内存泄漏指的是进程中某些对象(垃圾对象)已经没有使用价值了,但是它们却可以直接或间接地引用到GC roots导致无法被GC回收。Dalvik VM具备的GC机制(垃圾回收机制)会在内存占用过多时自动回收,严重时会造成内存溢出OOM。

内存溢出OOM
当应用程序申请的java heap空间超过Dalvik VM HeapGrowthLimit时,溢出。
注意:OOM并不代表内存不足,只要申请的heap超过Dalvik VM HeapGrowthLimit时,即使内存充足也会溢出。效果是能让较多进程常驻内存。

如果RAM不足时系统会做什么?
Android的Memory Killer会杀死优先级较低的进程,让高优先级进程获取更多内存。

Android系统默认内存回收机制

进程优先级:Foreground进程、Visible进程、Service进程、Background进程、Empty进程;
如果用户按Home键返回桌面,那么该app成为Background进程;如果按Back返回,则成为Empty进程
ActivityManagerService直接管理所有进程的内存资源分配。所有进程要申请或释放内存都需要通过ActivityManagerService对象。
垃圾回收不定期执行。当内存不够时就会遍历heap空间,把垃圾对象删除。
堆内存越大,则GC的时间更长

2016214165539064.png (439×249)

二、优化
Bitmap优化
Bitmap非常消耗内存,而且在Android中,读取bitmap时, 一般分配给虚拟机的图片堆栈只有8M,所以经常造成OOM问题。所以有必要针对Bitmap的使用作出优化:

图片显示:加载合适尺寸的图片,比如显示缩略图的地方不要加载大图。 图片回收:使用完bitmap,及时使用Bitmap.recycle()回收。 问题:Android不是自身具备垃圾回收机制吗?此处为何要手动回收。 Bitmap对象不是new生成的,而是通过BitmapFactory生产的。而且通过源码可发现是通过调用JNI生成Bitmap对象(nativeDecodeStream()等方法)。所以,加载bitmap到内存里包括两部分,Dalvik内存和Linux kernel内存。前者会被虚拟机自动回收。而后者必须通过recycle()方法,内部调用nativeRecycle()让linux kernel回收。 捕获OOM异常:程序中设定如果发生OOM的应急处理方式。 图片缓存:内存缓存、硬盘缓存等 图片压缩:直接使用ImageView显示Bitmap时会占很多资源,尤其当图片较大时容易发生OOM。可以使用BitMapFactory.Options对图片进行压缩。 图片像素:android默认颜色模式为ARGB_8888,显示质量最高,占用内存最大。若要求不高时可采用RGB_565等模式。图片大小:图片长度*宽度*单位像素所占据字节数 ARGB_4444:每个像素占用2byte内存 ARGB_8888:每个像素占用4byte内存 (默认) RGB_565:每个像素占用2byte内存

对象引用类型

强引用 strong:Object object=new Object()。当内存不足时,Java虚拟机宁愿抛出OOM内存溢出异常,也不会轻易回收强引用对象来解决内存不足问题;
软引用 soft:只有当内存达到某个阈值时才会去回收,常用于缓存;
弱引用 weak :只要被GC线程扫描到了就进行回收;
虚引用
如果想要避免OOM发生,则使用软引用对象,即当内存快不足时进行回收;如果想尽快回收某些占用内存较大的对象,例如bitmap,可以使用弱引用,能被快速回收。不过如果要对bitmap作缓存就不要使用弱引用,因为很快就会被GC回收,导致缓存失败。
池 pool

对象池:如果某个对象在创建时,需要较大的资源开销,那么可以将其放入对象池,即将对象保存起来,下次需要时直接取出使用,而不用再次创建对象。当然,维护对象池也需要一定开销,故要衡量。
线程池:与对象池差不多,将线程对象放在池中供反复使用,减少反复创建线程的开销。

您可能感兴趣的文章:Android项目基本结构详解深入解读Android的Volley库的功能结构浅析Android系统的架构以及程序项目的目录结构浅谈Android开发中项目的文件结构及规范化部署建议Android编程入门之HelloWorld项目目录结构分析Android应用开发的一般文件组织结构讲解Android源码中的目录结构详解Android程序结构简单讲解


--结束END--

本文标题: 浅谈Android系统的基本体系结构与内存管理优化

本文链接: https://www.lsjlt.com/news/25708.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 培训系统的内部优化与管理
    简介: 在今天的商业环境中,有效的内部培训系统是企业成功的关键因素之一。本文将探讨如何通过内部培训软件系统来优化和管理培训活动。 培训系统不仅是企业进行员工教育的重要工具,也是提升企业绩效的有效途径。本文将详细探讨如何通过内部培训软件系统来...
    99+
    2024-01-25
    化与 系统
  • Linux系统基本的内存管理知识介绍
    这篇文章主要介绍“Linux系统基本的内存管理知识介绍”,在日常操作中,相信很多人在Linux系统基本的内存管理知识介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统基本的内存管理知识介绍”的疑...
    99+
    2023-06-12
  • 如何优化学校管理系统的MySQL表结构?
    如何优化学校管理系统的MySQL表结构?随着信息技术的不断发展,学校管理系统已经成为学校管理工作中不可或缺的一部分。而学校管理系统中的数据库设计则是其中重要的一环。优化学校管理系统的MySQL表结构可以提高系统的性能和稳定性,减少数据查询和...
    99+
    2023-10-31
    优化 MySQL表结构 学校管理系统
  • 工程一体化管理系统优化工程管理的关键
    随着工程行业的不断发展,工程一体化管理系统成为了提高工程效率和质量的重要工具。本文将详细介绍工程一体化管理系统的作用、优势以及如何应用,以帮助读者更好地理解并利用这一系统。 工程一体化管理系统是一种将工程设计、施工、运维等多个环节有机整合在...
    99+
    2023-12-17
    工程管理 系统优化 关键
  • MySQL表结构设计:学校管理系统的性能优化指南
    MySQL表结构设计:学校管理系统的性能优化指南在现代教育领域中,学校管理系统的重要性不言而喻。这些系统负责处理学生、教师和课程等信息,因此它们的性能优化至关重要。本文将介绍一些优化MySQL表结构的方法,并提供具体的代码示例,以帮助学校管...
    99+
    2023-10-31
    性能优化 MySQL表 学校管理系统
  • MySql优化之体系结构及存储引擎的示例分析
    这篇文章给大家分享的是有关MySql优化之体系结构及存储引擎的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、MySQL结构体系总体上, 我们可以把 MySQL 分成三...
    99+
    2024-04-02
  • Linux系统中用户管理的基本命令总结
    这篇文章主要介绍“Linux系统中用户管理的基本命令总结”,在日常操作中,相信很多人在Linux系统中用户管理的基本命令总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统中用户管理的基本命令总结...
    99+
    2023-06-12
  • 内存管理的艺术:操作系统内存分配与释放
    内存管理是计算机系统的一项关键任务,负责分配和管理程序和数据在内存中的存储空间。本文探讨了内存管理在现代操作系统的核心原则和技术,重点介绍了内存分配和释放策略。 内存管理 分配器 释放器 页面分配 段式分页 内存管理简介 内存是计算机...
    99+
    2024-02-17
  • 企业客服管理系统的优化与应用
    摘要: 随着企业的发展,客服服务在客户体验和业务流程中扮演着越来越重要的角色。然而,传统的客服管理模式往往效率低下,无法满足现代客户的需求。本文将详细介绍一种基于人工智能和大数据的新型客服管理系统,该系统能有效地提高客服服务效率,改善客户体...
    99+
    2024-01-25
    管理系统 客服 企业
  • Oracle之体系结构详解,基本操作管理及客户端远程连接
    上一篇文章《Oracle Database 12c安装》讲解了如何安装oracle数据库,这篇文章继续讲解数据库的体系结构,基本操作管理及客户端远程连接Oracle的体系结构 Oracle数据库由两部分组成...
    99+
    2024-04-02
  • 浅谈操作系统中用户级线程与内核级线程的优缺点
    用户级线程、内核级线程、操作系统、进程、线程 用户级线程 用户级线程是创建与管理由用户程序直接实现的线程。在用户级实现线程的过程中,当一个线程阻塞时,其它的线程照样可以继续运行。因此,用户级线程可有效利用多核处理器的特性。 优点: 创...
    99+
    2024-02-03
    用户级线程与内核级线程的优缺点
  • 揭开内存管理的黑盒子:操作系统内存分配与释放
    内存管理概述 内存管理是操作系统的一项基本功能,负责分配和释放应用程序所需的内存资源。当应用程序启动时,操作系统会为其分配一段连续的内存区域,称为进程地址空间。该地址空间包含应用程序的代码、数据和堆栈。 内存分配策略 操作系统使用不同的...
    99+
    2024-02-17
    内存管理 操作系统 分配 释放 动态内存分配器
  • 如何在MySQL中设计仓库管理系统的库存表结构?
    如何在MySQL中设计仓库管理系统的库存表结构?在仓库管理系统中,库存管理是非常重要的一环。为了有效地管理仓库中的物品库存,我们需要在MySQL数据库中设计合理的库存表结构。本文将介绍如何设计库存表结构,并提供一些具体的代码示例。建立表首先...
    99+
    2023-10-31
    MySQL 仓库管理系统 库存表结构
  • 工程项目信息化管理系统的应用与优势
    随着科技的发展和信息化的普及,工程项目信息化管理系统已经成为现代工程建设领域中不可或缺的一部分。本文将介绍工程项目信息化管理系统在工程管理中的应用以及其带来的优势。 详细说明:1. 实时数据共享与协同工作工程项目信息化管理系统可以实现项目各...
    99+
    2024-01-15
    工程项目 信息化管理 优势
  • 探索内存管理的未知领域:操作系统内存分配与释放
    内存管理是一个复杂的过程,涉及分配和释放计算机系统中的内存。操作系统(OS)负责管理这一过程,确保高效和有效地使用可用内存。本文将探讨内存分配和释放的机制,以及在操作系统中实现它们的策略。 内存分配: 内存分配涉及将内存块分配给进程或线...
    99+
    2024-02-17
    内存管理 操作系统 分配 释放 分页
  • 如何使用MySQL设计仓库管理系统的表结构来跟踪库存变化?
    如何使用MySQL设计仓库管理系统的表结构来跟踪库存变化?介绍仓库管理系统是一个用来管理货物进出、库存变化的重要系统。在系统设计中,合理的表结构设计非常关键,能够有效地跟踪库存变化,确保数据的准确性和可靠性。本文将介绍如何使用MySQL来设...
    99+
    2023-10-31
    MySQL 表结构 仓库管理系统
  • 基于Springboot商品进销存管理系统的设计与实现
    目录一、项目简介二、环境介绍三、系统展示四、核心代码展示五、项目总结一、项目简介 本项目实现了基于springboot的进销存管理系统,主要用户开设网店的相关商品的进货、销售、库存的...
    99+
    2022-11-13
    Springboot商品进销存管理系统 Springboot 商品管理系统 Springboot 管理系统
  • 基于PHP+MySQL超市库存管理系统的设计与实现
    随着经济的高速发展,超市的信息化工作也在如火如荼地进行,由于超市规模的不断扩大以及商务往来的日益增多,超市对进销存信息的掌握和使用就越来越多,因此以前的原始的手工操作方式就不能适应超市快速发展的需要,...
    99+
    2023-10-09
    php 开发语言
  • Windows系统虚拟内存的设置优化方法整理[图文]
    首先得明白什么是虚拟内存,以及虚拟内存有什么作用。   在早期,因为内存价格非常昂贵,所以一般电脑上都不会配置太多。但有时候,我们使用的应用程序所需要的内存量会超过了物理内存量,这时,操作系统就会暂时将不需要访问的数据通...
    99+
    2023-05-24
    Windows 虚拟内存 设置 优化 系统 方法
  • 订单与客户管理系统优化企业运营的关键
    随着企业规模的扩大和业务的多样化,订单与客户管理系统已经成为企业运营管理中不可或缺的一部分。订单与客户管理系统可以帮助企业高效地管理订单,提供客户个性化服务,提高客户满意度和忠诚度,从而提高企业的竞争力。本文将详细说明订单与客户管理系统的功...
    99+
    2023-11-23
    客户管理系统 订单 关键
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作