返回顶部
首页 > 资讯 > 移动开发 >Android虚拟机Dalvik和ART科普
  • 209
分享到

Android虚拟机Dalvik和ART科普

Android虚拟机Dalvik ART的Android虚拟机 2023-01-18 12:01:21 209人浏览 薄情痞子
摘要

目录前言Dalvik 虚拟机Dalvik诞生消亡史Dalvik 特点 (与JVM的区别)什么是JIT(Just-In-Time Compiler)什么是dex什么是odexART 虚

前言

虽然Android程序是使用Java语言开发的,当然,现在也可以使用Kotlin语言。但是实际上我们开发出来的Android程序并不能运行在JVM上,而是只能运行在一个类似JVM的Android虚拟机上。Android虚拟机有两种,分别是Dalvik虚拟机ART虚拟机

Dalvik 虚拟机

Dalvik虚拟机是Google自己设计的用于Android平台的虚拟机,它曾经是Android平台的核心组成部分之一。它负责加载dex/odex文件并解析成机器码然后执行。Dalvik虚拟机并没有遵循《Java虚拟机规范》,因此不能算是Java虚拟机。但是它与Java却又有联系,它执行的DEX文件是通过Class文件转化而来。我们也可以认为它是为了能在安卓设备运行而对JVM进行优化的产物

Dalvik诞生消亡史

  • Android 1.0,使用Dalvik作为Android虚拟机运行环境。
  • Android 2.2,Google在Andriod虚拟机中加入了JIT编译器(Just-In-Time Compiler)。
  • Android 4.4,Google带来了全新的虚拟机运行环境ART,此时ART和Dalvik是共存的,用户可以在两者之间进行选择。
  • Android 5.0,ART全面取代了Dalvik成为了Android虚拟机运行环境,至此Dalvik退出历史舞台。

Dalvik 特点 (与JVM的区别)

  • Dalvik虚拟机运行的是Dalvik字节码,Dalvik字节码由Java字节码转换而来,并被打包到一个dex文件中。而JVM运行的是class文件或jar文件。
  • 加载速度快,dex相比于Jar文件会把所有包含的信息整合在一起,减少了冗余信息。这样就减少I/O操作,提高类的查找速度。
  • Dalvik虚拟机是基于寄存器,而JVM是基于栈(操作数栈)。虽然基于寄存器执行效率好,但是可移植性差,难跨平台。
  • Dalvik虚拟机允许在有限的内存中同时运行多个进程,每一个应用都运行在一个Dalvik虚拟机实例中,拥有独立的进程空间。
  • Dalvik虚拟机有共享机制,不同应用之间在运行时可以共享相同的类,拥有更高的效率。

什么是JIT(Just-In-Time Compiler)

早期没有JIT的时候,虚拟机运行时,会通过解释器来解释字节码并将其翻译为机器码,逐条读入,逐条翻译,最后再执行,这样就比较慢,效率不高。针对上面这个问题,引进了JIT(即时编译器)技术。它是一种优化手段

JIT技术简单来说就是将解释过的机器码缓存起来,下次再执行时到这个方法的时候,则直接从缓存里面取出机器码来执行。减少了读取字节码和翻译字节码的操作。以此来提高效率。JIT技术的引入使得Dalvik的性能提升了3~6倍

不过要注意的是并不是所有执行过的代码对应的机器码都会被缓存起来。而是只有被认定为热点代码(Hot Spot Code) 的代码才会。这里所指的热点代码主要有两类,包括:

  • 被多次调用的方法
  • 被多次执行的循环体(虽然只是循环体被多次执行,但仍是将整个方法的机器码缓存起来)

JIT技术虽好,但是也是有缺点的:

  • 每次重新启动引用都需要重新编译
  • 运行时比较耗电

什么是dex

dex是二进制文件,用于在Android虚拟机上执行。是通过把所有的class文件进行合并优化得到的。dex文件去除了class文件中的冗余信息(比如重复字符串),并且结构更加紧凑,因此在dex解析阶段可以减少I/O操作,提高类查找速度。

它与.jar文件不同,.jar文件像是一个文件夹,里面的.class是单独的文件,各个class信息里面会出现重复的信息。而dex文件,则将所有的.class里面的信息整合在一起,去除掉里面的重复数据。

什么是odex

odex是从apk提取出dex文件并通过优化后得到的产物,它被保存到data/dalvik-cache目录下。原apk文件中的classes.dex可以保留也可以删除,甚至有时候会留下残缺的dex文件。

系统在首次启动时,需要对预置的apk进行安装,此时需要将dex从apk文件中解压出来放到data/app文件夹中。

  • 在Dalvik虚拟机中,会通过dexopt来对dex进行优化,生成odex文件,并将其保存到手机的VM缓存文件夹data/dalvik-cache下(注意,这边生成的odex文件后缀依然是dex )。它是一个dey文件,里面仍然还是字节码。
  • 在ART虚拟机上,同样会在首次进入系统的时候使用dexopt工具来对dex进行优化,不过此时的优化是将dex字节码翻译成本地机器码。并保存在data/dalvik-cache下。

一般情况下,在Android系统进行编译的时候,预处理提取Odex文件的话,将会大大优化系统首次启动时间。

ART 虚拟机

ART虚拟机在Android 5.0开始替换Dalvik虚拟机。其处理应用程序执行的方式不同于Dalvik虚拟机,它不使用JIT而是使用了AOT(Ahead-Of-Time),也就是提前编译技术。并且对垃圾收集器也进行了改进和优化,当然也还包括了其他的优化。

什么是AOT(Ahead-Of-Time

AOT也就是提前编译技术。简单来说就是提前将字节码转换成本地机器码,然后存储在本地磁盘上,运行时可以直接执行,避免了Dalvik时期的应用运行时再来解释字节码。运行时效率大大提高。

在Android 7.0 之前,Android系统安装应用的时候,会进行一次预编译,将字节码预先编译成本地机器码,生成.oat文件,并存储在本地磁盘上,也就是AOT技术。这样在应用每次运行时就不需要重新编译,可以直接使用编译好本地机器码,运行效率大大提升。但是这也使得安装应用的时间大大增加,

于是在Android7.0,又重新引进了JIT技术,形成JIT/AOT混合编译模式,这种混合编译的特点是:

  • 应用在安装的时候,不进行AOT预编译。
  • 应用运行时这直接通过解释器翻译字节码为机器码然后执行。并同时记录热点代码信息到profile文件中。
  • 手机进入空闲或充电状态的时候,系统会扫描APP目录下的profile文件,并通过AOT对热点代码进行编译。
  • 下一次启动时,会根据profile文件来运行已编译好的机器码,避免在运行时对已经变过的方法又进行了JIT编译。
  • 应用运行期间会持续对热点代码进行记录,以方便在空闲或充电时进行AOT,以此循环。

使用了JIT来对AOT进行补充,可以提升运行时性能,节省存储空间,加快应用运行速度。 具体可以查看google官方文档:实现 ART 即时 (JIT) 编译器

ART垃圾收集器优化

  • 只有一次GC暂停(Dalvik需要两次)
  • 并发复制,可减少后台内存使用和碎片
  • GC暂停的时间不受堆大小影响
  • 在清理最近分配的短时对象这种特殊情况中,回收器的总GC时间更短
  • 优化了垃圾回收的工效,能够更加及时地进行并行垃圾回收,这使得GC_FOR_ALLOC事件在典型用例中极为罕见

ART时间线

  • Android 4.4 ,ART和Dalvik是共存的,用户可以在两者之间进行选择。
  • Android 5.0,正式取代Dalvik虚拟机成为Android虚拟机运行环境,Dalvik退出历史舞台,AOT取代JIT。
  • Android 7.0,JIT回归,采用JIT和aop混合编译模式。
  • ART持续更新优化

Dalvik VM 和 ART VM 有什么区别

  • ART早期使用AOT技术,后期使用AOT+JIT混合,而Dalvik使用JIT
  • ART支持64位CPU并兼容32位CPU,而Dalvik只支持32位CPU
  • ART对垃圾收集器进行了改进优化,提高了吞吐量。

以上就是Android虚拟机Dalvik和ART科普及使用的详细内容,更多关于Android虚拟机Dalvik ART的资料请关注编程网其它相关文章!

--结束END--

本文标题: Android虚拟机Dalvik和ART科普

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

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

猜你喜欢
  • Android虚拟机Dalvik和ART科普
    目录前言Dalvik 虚拟机Dalvik诞生消亡史Dalvik 特点 (与JVM的区别)什么是JIT(Just-In-Time Compiler)什么是dex什么是odexART 虚...
    99+
    2023-01-18
    Android虚拟机Dalvik ART的 Android虚拟机
  • Android虚拟机Dalvik和ART详解
    Dalvik和ART都是Android虚拟机的一种实现方式,它们的主要区别在于执行字节码的方式不同。1. Dalvik虚拟机:Dal...
    99+
    2023-09-22
    Android
  • Android中的Dalvik和ART详解及区别分析
    要想知道Dalvik和ART区别分析,首先我们要分别知道这两者是什么? 什么是Dalvik? Dalvik是Google公司自己设计用于Android平台的虚拟机。 Dalvi...
    99+
    2022-06-06
    art Android
  • 云虚拟主机和普通虚拟主机有什么区别
    云虚拟主机和普通虚拟主机的区别:1、云虚拟主机有主机机柜带宽支撑,能实现带宽迁移,不会出现网站卡顿的情况,普通虚拟主机会出现卡顿的情况;2、云虚拟主机有四块硬盘,普通虚拟主机只有一块普通的机械硬盘,没有设置硬盘阵列。具体内容如下:卡顿云虚拟...
    99+
    2024-04-02
  • 服务器虚拟化技术深度科普
    服务器虚拟化技术要追述到IBM大型机的虚拟化 z/VM,在z系列大型机(非虚拟化操作系统是z/OS)上实现服务器虚拟化。基于z/VM可以运行上百个虚拟机。后来在Power上的KVM技术是PowerKVM;以及AIX虚拟化PowerVM,支持...
    99+
    2023-06-04
  • 【Android】Android虚拟机
    虚拟机 Android的虚拟机主要有两种:Dalvik 虚拟机和 ART(Android Runtime)虚拟机。 Dalvik 虚拟机 Dalvik 虚拟机是 Android 早期使用的虚拟机,它基...
    99+
    2023-09-23
    android
  • 虚拟主机和普通服务器有哪些区别
    虚拟主机和普通服务器的区别有:1.资源配置不同;2.操作系统选择不同;3.网站环境不同;4.性能不同;5.成本不同;具体分析如下:资源配置不同服务器有独立的IP、内存、硬盘和带宽;而虚拟主机的资源是共享一台服务器的。操作系统选择不同服务器可...
    99+
    2024-04-02
  • vmware虚拟机安装 Android x86
    首先先安装 VMware 虚拟机,并下载 android-x86_64-9.0-r2.iso 系统。 选择第一项回车,如图: 选择NO回车选择NEW回车 选择Primary在回车 ...
    99+
    2023-08-31
    linux
  • 虚拟主机和虚拟服务器的区别
    虚拟主机和虚拟服务器的区别有:1.概念不同,虚拟服务器是将服务器主机分成若干个主机,虚拟主机是实现多网域服务的方法;2.应用领域不同,虚拟服务器技术主要应用于HTTP服务,虚拟服务器技术主要应用于HTTP,FTP,EMAIL等多项服务;具体...
    99+
    2024-04-02
  • VMware虚拟机Ubuntu1804编译Android 10.0
      系统 windows系统下VMware Workstation 15 Pro虚拟机装的Ubuntu1804  64位   Android版本 Android-10.0.0_...
    99+
    2022-06-06
    VMware ubuntu Android
  • android虚拟机原理是什么
    Android虚拟机的原理是将Android操作系统安装在主机操作系统上,通过虚拟化技术实现在主机上运行Android应用程序。具体...
    99+
    2023-10-12
    android
  • VMware安装Android x86_64 9.0虚拟机
    Vmware 安装 Android 虚拟机 Vmware 安装 Android 虚拟机1.[获取镜像-天翼云盘](https://cloud.189.cn/t/2mEzIreEnU3m)2.安装·VMware3.创建虚拟机安装And...
    99+
    2023-08-17
    android java apache
  • 海外虚拟云主机和虚拟主机怎么区分
    海外虚拟云主机和虚拟主机区分的方法:1、虚拟主机不需要搭建环境,云主机需要用户手动配置环境并搭建架构,但操作空间相比虚拟主机大;2、 云主机实现资源独享,虚拟主机是共享资源,资源具有局限性;3、虚拟主机不支持灵活扩展和按需付费,云主机实现按...
    99+
    2024-04-02
  • 海外虚拟云主机和虚拟主机如何区分
    海外虚拟云主机和虚拟主机在很多方面有所不同,主要区分如下: 技术架构:虚拟云主机采用云计算技术,拥有更强大的资源分配和管理能力,...
    99+
    2024-05-22
    海外虚拟云主机 虚拟主机
  • Android虚拟机与类加载机制详情
    目录JVM与Dalvik基于栈的虚拟机字节码指令执行过程基于寄存器的虚拟机寄存器基于寄存器的虚拟机ART与Dalvikdex2aotdexopt与dexaotAndroid N的运作...
    99+
    2024-04-02
  • VPS主机商普遍采用的主流虚拟机有哪些程序
    本篇内容主要讲解“VPS主机商普遍采用的主流虚拟机有哪些程序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VPS主机商普遍采用的主流虚拟机有哪些程序”吧!VPS(Virtual Private ...
    99+
    2023-06-10
  • 云服务器和虚拟机
    云服务器和虚拟机都是指用来存储和管理虚拟资源的服务器。它们有以下区别和优缺点: 区别: 大小:虚拟机一般比云服务器小,但也可以比云服务器大。 可用性:虚拟机是虚拟化软件的集合,可以为多个应用程序提供服务。云服务器则是基于云计算平台构建的...
    99+
    2023-10-26
    虚拟机 服务器
  • 虚拟机和云服务器
    虚拟机和云服务器是计算资源的虚拟化和云端部署的概念。它们的主要区别是它们在哪里部署。 虚拟机通常在一个本地的服务器上创建,以便在本地运行应用程序。它通常由操作系统、应用程序和其他相关软件组成,可以使用不同的硬件和操作系统。虚拟机的创建和部...
    99+
    2023-10-26
    虚拟机 服务器
  • VMware虚拟机安装Android的步骤
    VMware虚拟机安装Android的步骤 在本教程中,我们将介绍如何在VMware虚拟机上安装Android操作系统。VMware是一款功能强大的虚拟机软件,它允许我们在一台物理计算机上模拟多个虚拟...
    99+
    2023-10-11
    android gitee Android
  • android虚拟机的特点有哪些
    Android虚拟机是一种运行在计算机上的模拟Android操作系统的软件。它的特点包括: 跨平台兼容性:Android虚拟机可以...
    99+
    2024-04-09
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作