Android 从5.0开始默认使用ART虚拟机执行程序,抛弃了Dalvik虚拟机.加快了Android的运行效率,提高系统的流畅性

原因是Dalvik虚拟机执行的是dex字节码,ART虚拟机执行的是本地机器码, Dalvik虚拟机有一个解释器,用来执行dex字节码, Android从2.2开始,通过JIT(Just-In-Time)进行Dalvik虚拟机的优化,将使用频率较高的字节码翻译成机器码,就可以有效地提高Dalvik虚拟机的执行效率。但即使用采用了JIT,Dalvik虚拟机还是比不上ART虚拟机,因为Dalvik翻译工作是在程序运行时的,而ART在APK在安装时就对其包含的Dex字节码进行翻译,得到对应的本地机器指令,于是就可以在运行时直接执行了。

安装:

Android系统通过PackageManagerService来安装APK,在安装的过程,PackageManagerService会通过另外一个类Installer的成员函数dexopt来对APK里面的dex字节码进行优化,对Dalvik虚拟机来说只进行dex字节码的优化,而ART虚拟机将dex字节码翻译成本地机器码,注意的是两种虚拟机不管事字节码的优化还是翻译成机器码都会生成一个后缀是odex文件,只不过ART的是一个oat类型文件,什么是oat文件(不清楚,好像是Linux的文件)

启动:

Android系统在启动的时候,会创建一个Zygote(受精卵,)进程,一切进程产生的一个进程。Zygote进程在启动的过程中会创建一个Dalvik虚拟机(或是ART虚拟机)。Zygote进程是通过复制自己来创建新的应用程序进程的,他会连同虚拟机一并复制可以大大提高系统的启动速度,就像单例一样,不用再为每个进程new一个,而且每个应用进程所需要的虚拟机也都是直接拿来就可以了.

更多相关文章

  1. Genymotion - 速度飞一般的Android虚拟机
  2. Android AIDL进程IPC通信 一次就好
  3. Android虚拟机与Java虚拟机——两种虚拟机的比较
  4. Android 多进程通信
  5. [日更-2019.4.22、23、24] cm-14.1 Android系统启动过程分析(三)-S
  6. 关于 android 子进程域名解析失败的问题
  7. 转载:Android进程的内存管理分析
  8. Java 字节码编译为Dex,d8比dx更好用!

随机推荐

  1. 转:RTC搭建android下三层应用程序访问服务
  2. Asynchronous HTTP Requests in Android(
  3. Android 水波纹点击效果(Ripple Effect)
  4. 一种粗暴快速的 Android 全屏幕适配方案
  5. 【Android开发高级系列】Android多进程专
  6. 深入探索 Android(安卓)包体积优化(匠心制
  7. Android笔记 - Android启动之Linux内核启
  8. android线程池原理和实现
  9. android自定义ViewGroup基础
  10. Android之网络请求9————Retrofit的简