首页 > 其他分享 >ART还是Dalvik虚拟的原理是什么,跟安卓运行APK有啥关系

ART还是Dalvik虚拟的原理是什么,跟安卓运行APK有啥关系

时间:2023-11-09 13:22:35浏览次数:31  
标签:翻译 ART Dalvik 虚拟机 跟安卓 编译 Android

ART(Android Runtime)和Dalvik都是Android操作系统中的应用程序运行环境。它们都是虚拟机,用于在Android设备上执行应用程序代码。APK(Android Package)是Android应用程序的打包格式,包含了应用程序的所有文件,包括应用程序代码、资源和元数据。

Dalvik虚拟机:

  • 原理:Dalvik是一种基于寄存器的虚拟机,它专为Android设计,用来执行DEX(Dalvik Executable)文件,这是一种专门为Dalvik优化的字节码格式。
  • 运行方式:当你启动一个应用程序时,Dalvik虚拟机会将这些DEX文件转换为可以在设备上运行的机器码。在早期的Android版本中,这种转换是即时的(JIT,即时编译)。

ART虚拟机:

  • 原理:ART是Dalvik的后继者,引入了前期(AOT,提前编译)编译。这意味着应用程序的字节码在安装时就被编译成机器码,这样在运行时就不需要再编译,可以提高性能。
  • 运行方式:ART同样使用DEX文件,但它在应用程序安装的时候就将它们编译成机器语言,这样应用程序在启动和运行时速度更快,因为它不需要再进行编译过程。

生活中的比喻:

想象一下你有一本书(APK),但这本书是用一种外星语言(DEX文件)写的。你想读这本书,但你需要一个翻译(虚拟机)来把它翻译成你能理解的语言(机器码)。

  • Dalvik:每次你想读书时,你都需要找到一个翻译来实时翻译每一句话(JIT编译)。这样你可以立即开始阅读,但如果书很长,等待翻译可能会让阅读过程变慢。
  • ART:当这本书第一次到你手上时,你就雇了一个翻译把整本书都翻译成了你的语言,并把它打印出来(AOT编译)。这需要一些时间和劳力,但一旦翻译完成,你就可以随时快速阅读,而不需要等待翻译。

在这个比喻中,即时翻译(Dalvik)允许你更快开始阅读,但可能会让整体阅读速度变慢,而提前翻译(ART)需要更多的初始工作,但最终让阅读过程更加流畅。

 作者:http://xkrj5.com 纯原创首发,转载保留版权!

标签:翻译,ART,Dalvik,虚拟机,跟安卓,编译,Android
From: https://www.cnblogs.com/xkrj5/p/17819512.html

相关文章

  • Dalvik/ART虚拟机是什么,跟安卓运行APK有啥关系,举个常用例子
    Dalvik和ART(AndroidRuntime)都是安卓操作系统中的应用程序虚拟机,它们是Android设备上运行APK文件的关键组成部分。Dalvik虚拟机概念:Dalvik是Android最初使用的虚拟机,它专为Android系统设计,主要用于执行APK中的DalvikExecutable(.dex)文件。工作原理:Dalvik通过使用即时编译(JIT)将......
  • 大屏展示技术栈:vue2+echarts+dataV
    1.大屏搭建使用的是dataV组件http://datav.jiaminghi.com/guide,使用dataV组件有如下注意点:a.修改配置项config中data的值,需要重新赋值configb.修改dataV某些内置样式,他有个固定的类2.登录界面动态背景,使用的是vanta.jsVanta.js-Animated3DBackgroundsForYourWebsite......
  • 关于LINUX权限(启动tomcat)-bash: ./startup.sh: Permission denied
    关于LINUX权限-bash:./startup.sh:Permissiondenied在执行./startup.sh,或者./shutdown.sh的时候,爆出了Permissiondenied,其实很简单,就是今天在执行tomcat的时候,用户没有权限,而导致无法执行,用命令chmod修改一下bin目录下的.sh权限就可以了chmodu+x*.sh在此执行,OK了。......
  • 备份下启动springboot项目脚本文件 start.sh
    1.将jar包放到和该脚本同级目录2.记得chmod777./start.sh赋予执行权限3.执行./start.sh文件即可4.重启也可以直接执行此文件5.如果没有打包配置文件可以在此脚本同级目录创建config目录将yml/properties配置文件放进去. #!/bin/bash#进入脚本所在路径cd`dirname$......
  • Electrical(Hardware) Protocols: FIFO / JTAG / SPI / IIC / IIS / UART / SWD / ICS
    Electrical(Hardware)Protocols:JTAG(JointTestActionGroup),JTAGisactuallyaprotocoloverSPI.5pins/connections(GND,TMS,TCK,TDI,TDO),Outputtype:Maximumvoltage:5.5volts(5voltsafe),3.3voltnormal,oropencollector(pull-upresistorsre......
  • arthas安装和简单使用
    介绍Arthas是一款线上监控诊断产品,通过全局视角实时查看应用load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。------------截取arthas官网安装外网......
  • Dart 基础知识笔记
    本文主要介绍Dart基础知识笔记。tourmain()函数是Dart程序的入口main()函数返回void并具有可选的List<String>参数作为参数所有对象都从Object类继承Dart是强类型当您想明确地不希望有任何类型时,使用特殊类型dynamicDart可以在函数内创建函数(嵌套函数或局部函数),可......
  • Gartner亚太区报告:浪潮云海超融合第一阵营唯一逆势增长,雄踞前三
    近日,Gartner 发布《2023H1 全球数据中心硬件集成系统市场数据》,数据显示,2023年上半年亚太区超融合市场整体销售额8.66亿美元(63.36 亿元人民币),同比下降10.3%,浪潮云海超融合在第一阵营唯一逆势同比增长2.8%,市场份额雄踞前三。凭借领先的产品竞争力、覆盖亚太的营销服务体系、全球......
  • Quartz触发器CronTriggerBean 配置
    CronTrigger表达式分为七项子表达式,其中每一项以空格隔开,从左到右分别是:秒,分,时,月的某天,月,星期的某天,年;其中年不是必须的,也就是说任何一个表达式最少需要六项! 例:0012?*WED表示每个星期三的12点执行,这里没有“年”这项! 字段名(项) 必须 值范围 特殊字符 秒是0-59......
  • 关于spring-boot-starter-parent 3.1.2和3.1.5版本的区别导致的错误
    1.问题在学习黑马程序员SpringBoot3+Vue3全套视频教程时,手动配置springboot项目时,由于之前spring-boot-starter-parent安装的版本是3.1.5,视频要求的是3.1.2,但是之前怎么弄也无法下载到3.1.2(后面已解决,可参考手动配置Maven依赖项),索性就是用了3.1.5版本。但是随即就遇到了问题,在......