Dalvik虚拟机

✍ dations ◷ 2025-08-15 16:02:58 #Android,Java虚拟机

Dalvik虚拟机,是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik由Dan Bornstein编写的,名字来源于他的祖先曾经居住过的小渔村达尔维克(Dalvík),位于冰岛埃亚峡湾。

大多数虚拟机包括JVM都是一种堆栈机器,而Dalvik虚拟机则是寄存器机。两种架构各有优劣,一般而言,基于堆栈的机器需要更多指令,而基于寄存器的机器指令更长。

从Android 5.0版起,Android Runtime(ART)取代Dalvik成为系统内默认虚拟机。

dx工具是一种用来转换Java class成为DEX格式的工具。多个类被包含在一个dex文件之中。各个类中重复的字符串和其他常量只在DEX中存放一次,以节省空间。Java字节码(bytecode)被转换成Dalvik虚拟机所使用的替代指令集。一个未压缩dex文件通常稍小于一个已经压缩的.jar档。

安装到行动设备之时,Dalvik可执行档可能会被修改。为了获得进一步优化,虚拟机可能会调整文件内部分数据的端序、内联一些函数和简单的结构体、并短路掉一些不必要的操作。

当Android启动时,Dalvik VM监视所有的程序(APK),并且创建依存关系树,为每个程序优化代码并存储在Dalvik缓存中。Dalvik第一次加载后会生成Cache文件,以提供下次快速加载,所以第一次会很慢。

Dalvik解释器采用预先算好的Goto地址,每个指令对内存的访问都在64字节边界上对齐。这样可以节省一个指令后进行查表的时间。为了强化功能, Dalvik还提供了快速翻译器(Fast Interpreter)。

dx是一套工具,可以将Java .class转换成.dex格式。一个dex档通常会有多个.class。由于dex有时必须进行优化,会使文件大小增加1-4倍,以ODEX结尾。

相关

  • 生命征象生命体征(英语:Vital signs),或称生命迹象,医学术语,是一组4到6个最重要的人体基本生理功能(维持生命)的表征。这些测量结果被用于评估个体的身体健康,提供潜在疾病的线索,并显示出
  • 细胞因子风暴细胞素风暴、细胞因子风暴(英语:Cytokine storm),又称高细胞因子症(英语:Hypercytokinemia),一种不适当的免疫反应,因为细胞因子与免疫细胞间的正回馈回路而产生。这也被认为是1918年
  • 比迪娅·戴维·班达里比迪娅·戴维·班达里(尼泊尔语:विद्या देवी भण्डारी;1961年6月19日-),是一位尼泊尔的女性政治人物,她是尼泊尔共产党(联合马列)的副主席,前国防部长,2015年10月28日
  • 高雄捷运红线.mw-parser-output .RMbox{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2)}.mw-parser-output .RMinline{float:none
  • 增城增城区(官方音译:Zengcheng,传统外文:Tsengshing、Tsang Shing)是中国广东省广州市市辖区。增城建县于东汉建安六年(201年),因南海郡原辖六县,新设一县,增多一城,故名“增城”;1993年12
  • 普悠玛客运普悠玛客运股份有限公司,简称普悠玛客运,是位于台湾台东县的一家客运公司,主要经营台东市区的公车业务,2014年5月23日成立。普悠玛客运创始目的在于台东市区因台湾铁路管理局旧
  • 福特级杰拉尔德·R·福特级航空母舰(Gerald R. Ford-class aircraft carriers,简称福特级航空母舰)是美国海军最新的次世代超级航空母舰,也是美国海军第三代核动力航空母舰。在同级一
  • 老手《老手》(或称《Veteran》;韩语:베테랑)是2015年上映的一部韩国警匪动作片,由柳承完(柳承范的哥哥)执导《柏林谍变》和《新村僵尸漫画》等电影的导演指导,该片讲述的是犯下罪行的财
  • 菲尔·派瑞菲尔·派瑞(英语:Phil Perry,1952年1月12日-),美国R&B歌手,词曲作家,音乐家,1971年至1975年的Montclairs。
  • 莫蒂默·杰尔姆·阿德勒莫蒂默·杰尔姆·阿德勒(英语:Mortimer Jerome Adler,1902年12月28日-2001年6月28日)是一名美国哲学家。阿德勒于1902年12月28日出生在美国纽约市的一个犹太移民家庭。14岁从中学