Android 新艺术是虚拟机吗?

Android 新艺术是虚拟机吗?,android,virtual-machine,dalvik,Android,Virtual Machine,Dalvik,我已经在互联网上阅读了关于Android操作系统新的ART运行时的文章。许多文章将ART称为一个新的虚拟机,我认为这是错误的,因为应用程序在安装到本机机器代码时是完全编译的。如果艺术不是一台虚拟机,那么它做什么呢?它是否为正在运行的应用程序提供运行时环境,如垃圾收集器、内存管理器等 它是否为正在运行的应用程序提供运行时环境,如垃圾收集器、内存管理器等 是的,还有用于调试和跟踪的钩子,可能还有更多。请注意,谷歌I|O 2014年大会即将举行,届时将介绍更多细节(大概) 许多文章将ART称为一个新的

我已经在互联网上阅读了关于Android操作系统新的ART运行时的文章。许多文章将ART称为一个新的虚拟机,我认为这是错误的,因为应用程序在安装到本机机器代码时是完全编译的。如果艺术不是一台虚拟机,那么它做什么呢?它是否为正在运行的应用程序提供运行时环境,如垃圾收集器、内存管理器等

它是否为正在运行的应用程序提供运行时环境,如垃圾收集器、内存管理器等

是的,还有用于调试和跟踪的钩子,可能还有更多。请注意,谷歌I|O 2014年大会即将举行,届时将介绍更多细节(大概)

许多文章将ART称为一个新的虚拟机,我认为这是错误的,因为应用程序在安装到本机机器代码时是完全编译的


.

如果你的意思是,从某种意义上说,ART是一台虚拟机,它“沙箱”了流程和资源,那么我认为它与Dalvik机器有着相同的局限性(因为DEX代码被转换为本机代码),并且像内容提供商等编程接口仍然用于访问数据。GGC对于虚拟机来说并不特别,C++中的原生Windows应用程序可以根据需要使用自定义垃圾回收器编写。

< P>是的,即使应用程序完全编译为本机代码,ART也是虚拟机。 要过度简化:

ART本身是一个Android应用程序,它用一个CPU模拟一台假想机器的硬件(CPU、寄存器等),CPU具有由字节码组成的机器代码指令集

Android程序(APK)被编译成由该虚拟机程序执行的字节码指令

虚拟机(ART)由本机代码程序(即,由硬件CPU执行的程序)实现。虚拟机的每个字节码指令都有相应的本机代码,用于实现虚拟机操作并更改虚拟机的状态。因此,例如,加载寄存器的字节码指令不一定会导致加载硬件寄存器。相反,它导致本机代码程序(ART)执行表示加载虚拟机寄存器的操作(可能加载内存位置而不是硬件寄存器)

使用解释时,实现虚拟机的本机代码程序检索字节码指令并对字节码进行解码,以确定要执行哪组本机代码指令,从而将虚拟机置于字节码指令所需的状态

当字节码被编译成本机代码(刚好及时或提前)时,字节码解码步骤被消除。相反,虚拟机的字节码指令由实现虚拟机操作的本机代码替换

也就是说,APK不再由字节码指令序列组成,而是由表示字节码所需状态更改的ART本机代码指令序列组成

关键的一点是,即使字节码不再被处理,虚拟机(ART)仍然是在硬件上执行的程序,而不是APK程序