zoukankan      html  css  js  c++  java
  • Android 操作系统的内存回收机制

    转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-mmry-rcycl/index.html

    Android APP 的执行环境

          Android 是一款基于 Linux 内核,面向移动终端的操作系统。

    为适应其作为移动平台操作系统的特殊须要。谷歌对其做了特别的设计与优化,使得其进程调度与资源管理与其它平台的 Linux 有明显的差别。主要包括以下几个层次:

    Application Framework

          Application Framework 将整个操作系统分隔成两个部分。相应用开发人员而言,全部 APP 都是执行在 Application Framework 之上。而并不须要关心系统底层的情况。Application Framework 层为应用开发人员提供了丰富的应用编程接口。如 Activity Manager,Content Provider,Notification Manager。以及各种窗体 Widget 资源等。在 Application Framework 层,Activity 是一个 APP 最主要的组成部分。一般每一个 Activity 相应于屏幕上的一个视图(或者说一屏),一个 APP 可以有一个或者多个 Activity。应用程序被打包成 .apk 格式的文件,由 Dalvik VM 解释执行。

    Dalvik VM

          Dalvik 虚拟机採用寄存器架构,而不是 JVM 的栈结构。Java 程序编译后的 .class 文件并不能在 Dalvik 中解释执行。因此 Google 提供了一个 dx 工具,用于将 .class 文件转换成 Dalivk 可以识别的 .dex 格式。

    详细 Dalvik VM 的细节不是本文重点,以下不再讨论。

    Linux kernel

          由上所述,全部的 APP 都是由 Java 代码编写并在 Dalvik VM 中得到解释执行。在 Android 操作系统中,每一个 Dalvik VM 的每一个 Instance 都相应于 Linux 内核中的一个进程。可以使用 adb shell 工具查看系统中的当前进程。

    例如以下图所看到的。Android2.3.3 启动后内核中的进程列表。

    这里写图片描写叙述
    UID 标识为 app_xx 的每一项都是一个 app 所占用的进程,可见 Android 设计使得每一个应用程序由一个独立的 Dalvik 实例解释执行,而每一个 Linux 内核进程载入一个 Dalvik 实例。通过这样的方式提供 app 的执行环境。如此,每一个 APP 的资源被全然屏蔽,互不干扰。

    尽管同一时候引入了进程间通信的困难,但也带来了更强的安全性。

    Android 内存回收原则

          以下将从 Application Framework 和 Linux kernel 两个层次分析 Android 操作系统的资源管理机制。
          Android 之所以採用特殊的资源管理机制,原因在于其设计之初就是面向移动终端,全部可用的内存仅限于系统 RAM,必须针对这样的限制设计相应的优化方案。当 Android 应用程序退出时。并不清理其所占用的内存,Linux 内核进程也相应的继续存在,所谓“退出但不关闭”。

    从而使得用户调用程序时可以在第一时间得到响应。当系统内存不足时,系统将激活内存回收过程。

    为了不因内存回收影响用户体验(如杀死当前的活动进程),Android 基于进程中执行的组件及其状态规定了默认的五个回收优先级:

    IMPORTANCE_FOREGROUND:
    IMPORTANCE_VISIBLE:
    IMPORTANCE_SERVICE:
    IMPORTANCE_BACKGROUND
    
  • 相关阅读:
    ubuntu 16.04 更新后搜狗输入法无法输入中文的问题
    转: 苹果APNS的说明
    转:svn 更新指定文件夹
    转: Java 应用一般架构
    【原创】关于bug反正出现的问题可能
    App开发者博客之: 包建强 (专注移动app开发)
    转: 阿里跨平台移动开发工具Weex
    【原创】存储层设计的一些方法论
    转:车牌的自动截取与识别方案
    转: java web demo的示例
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7058787.html
Copyright © 2011-2022 走看看