Android碎碎念1:Android系统架构

一、系统架构图

网络图源,先来两张网络图

 

 二、四层或者五层架构

1、应用层

是基于Android平台开发的应用,采用Java作为开发语言,包括系统自带的应用(短信管理、联系人管理、图库浏览、网页浏览等)和第三方开发的应用

2、应用框架层(FrameWork层)

 应用框架层是Google发布的核心应用所使用的API框架,开发人员可以使用这些框架提供的API来快速开发自己的应用程序,包括各种Manager,例如:Activity Manager(活动管理)、Window Manager(窗口管理)、View Manager(视图管理)、Notification Manager(通知管理)、Content Provider(内容提供者)、Package Manager(包管理)、Resource Manager(资源管理)、Location Manager(位置管理)

3、Native层(C++层)类库和Android运行时环境

Android的原生库主要基于C\C++实现的一些原生组件,

Android运行时主要包括Java核心库、Dalvik/ART虚拟机,两者一起构成了Android的应用环境基础

4、硬件接口层

native和硬件驱动交互接口层,这一层有时候也会直接不要,变成四层架构

硬件抽象层是对Linux 硬件驱动程序的封装,向上提供接口,屏蔽低层的实现细节。硬件抽象层不开源,可保护硬件厂商的商业秘密,但是会影响系统的性能。

Android对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),硬件抽象层运行在 用户空间, Linux 内核驱动程序运行在内核空间,内核驱动层只提供简单的访问 硬件逻辑,具体的实现细节,都放在硬件抽象层中 ,从而维护了硬件厂商的商业利益。

5、Linux内核层

Linux内核的操作系统,在Linux内核层,主要实现安全管理、进程管理、内存管理、电源管理、硬件驱动管理

主要是一些驱动。

三、Dalvik虚拟机和java虚拟机区别

来源:https://zhidao.baidu.com/question/1238373007717632179.html

1、Dalvik 和标准 Java 虚拟机(JVM)的首要bai差别
Dalvik 基于寄存器,而du JVM 基于栈。基于寄存器的虚拟机zhi对于更大的程序来说,在它们编译的时候,dao花费的时间更短。 JVM字节码中,局部变量会被放入局部变量表中,继而被压入堆栈供操作码进行运算,当然JVM也可以只使用堆栈而不显式地将局部变量存入变量表中。Dalvik字节码中,局部变量会被赋给65536个可用的寄存器中的任何一个,Dalvik指令直接操作这些寄存器,而不是访问堆栈中的元素。
2、Dalvik 和 Java 字节码的区别
VM字节码由.class文件组成,每个文件一个class。JVM在运行的时候为每一个类装载字节码。相反的,Dalvik程序只包含一个.dex文件,这个文件包含了程序中所有的类。Java编译器创建了JVM字节码之后,Dalvik的dx编译器删除.class文件,重新把它们编译成Dalvik字节码,然后把它们写进一个.dex文件中。这个过程包括翻译、重构、解释程序的基本元素(常量池、类定义、数据段)。常量池描述了所有的常量,包括引用、方法名、数值常量等。类定义包括了访问标志、类名等基本信息。数据段中包含各种被VM执行的函数代码以及类和函数的相关信息(例如DVM所需要的寄存器数量、局部变量表、操作数堆栈大小),还有实例变量。
3、Dalvik 和 Java 运行环境的区别    
Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
Dalvik虚拟机在android2.2之后使用JIT (Just-In-Time)技术,与传统JVM的JIT并不完全相同, 
Dalvik虚拟机有自己的 bytecode,并非使用 Java bytecode。
还有以下几点:
1、Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。   
2、Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。   
3、不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex。   
4、dex文件格式可以减少整体文件尺寸,提高I/O操作的类查找速度。   
5、odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化。   
6、所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。   
7、有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化、库的加载、预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的速度提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。

四、Dalvik虚拟机和ART虚拟机对比

原文来源:https://blog.csdn.net/wjw_java_android/article/details/81186553

Android Dalvik虚拟机和ART虚拟机对比

概述

Android4.4以上开始使用ART虚拟机,在此之前我们一直使用的Dalvik虚拟机,那么为什么Google突然换了Android运行的虚拟机呢?答案只有一个:ART虚拟机更优秀。

Dalvik vs ART

  • Dalvik
    Android4.4及以前使用的都是Dalvik虚拟机,我们知道Apk在打包的过程中会先将java等源码通过javac编译成.class文件,但是我们的Dalvik虚拟机只会执行.dex文件,这个时候dx会将.class文件转换成Dalvik虚拟机执行的.dex文件。Dalvik虚拟机在启动的时候会先将.dex文件转换成快速运行的机器码,又因为65535这个问题,导致我们在应用冷启动的时候有一个合包的过程,最后导致的一个结果就是我们的app启动慢,这就是Dalvik虚拟机的JIT特性(Just In Time)。
  • ART
    ART虚拟机是在Android5.0才开始使用的Android虚拟机,ART虚拟机必须要兼容Dalvik虚拟机的特性,但是ART有一个很好的特性AOT(ahead of time),这个特性就是我们在安装APK的时候就将dex直接处理成可直接供ART虚拟机使用的机器码,ART虚拟机将.dex文件转换成可直接运行的.oat文件,ART虚拟机天生支持多dex,所以也不会有一个合包的过程,所以ART虚拟机会很大的提升APP冷启动速度。

总结

  • ART优点:

    1. 加快APP冷启动速度
    2. 提升GC速度
    3. 提供功能全面的Debug特性
  • ART缺点:

    1. APP安装速度慢,因为在APK安装的时候要生成可运行.oat文件
    2. APK占用空间大,因为在APK安装的时候要生成可运行.oat文件

五、ART在7.0上的优化

作者:人生如棋
链接:https://www.zhihu.com/question/55652975/answer/154602317
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

  • Android 4.x(Interpreter + JIT)
    • 原理:平时代码走解释器,但热点trace会执行JIT进行即时编译
    • 优点:占用内存少
    • 缺点:耗电(退出App下次启动还会重复编译),卡顿(JIT编译时)

 

  • Android 5.0/5.1/6.0(interpreter + AOT)
    • 原理: 在AOT模式下,App在安装过程时, 就会完成所有编译。
    • 优点: 性能好
    • 缺点: App安装时间长,占用存储空间多。

 

  • Android 7.0/7.1的ART引入了全新的Hybrid模式(Interpreter + JIT + AOT)
    • 原理:
      • App在安装时不编译, 所以安装速度快。
      • 在运行App时, 先走解释器, 然后热点函数会被识别,并被JIT进行编译, 存储在jit code cache, 并产生profile文件(记录热点函数信息)。
      • 等手机进入charging和idle状态下, 系统会每隔一段时间扫描App目录下profile文件,并执行AOT编译(Google官方称之为profile-guided compilation)。
      • 不论是jit编译的binary code, 还是AOT编译的binary code, 它们之间的性能差别不大, 因为它们使用同一个optimizing compiler进行编译。
    • 优点: App安装速度快,占用存储少(只编译热点函数)。
    • 缺点: 前几次运行会较慢, 只有用户操作得次数越多,jit 和AOT编译后, 性能才会跟上来。

综上,Android 7.0/7.1上的ART是将Android 4.x的JIT和Android 5.x/6.0上的AOT结合,取长补短,从而在performance和battery之间取得某种trade off.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值