这个问题与android系统有关。Dalvik VM使用了JIT概念,这意味着当您第一次运行应用程序时,Dalvik VM会编译它并加载到RAM中,只要它能够停留在那里。我理解这个概念。但是名为ART的新虚拟机使用了AOT方法。ART在安装应用程序后(或者在安装应用程序时)进行编译。这意味着什么?ART编译的应用程序与已经编译的应用程序(如C应用程序)相同,但运行在与操作系统其他部分分离的单独进程中?有人能更彻底地解释一下这个概念吗。我必须做一些介绍,这里提到的是这个概念,但是我不理解这个概念,如果有人问我一些关于这个的问题,我不想显得很傻:)对不起,英语不好,如果有人能编辑一些问题,那就太好了。
发布于 2013-11-30 02:37:54
我并不完全熟悉Android上的Dalvik JIT是如何工作的,因为JIT有几个选项可以工作。
第一个选择是,在应用程序启动时,JIT将所有字节码转换为CPU指令。此选项在应用程序启动之前和该应用程序可以作为本机运行之后花费了一段时间。问题是,在启动过程中,翻译的应用程序必须保存在内存中,这是不好的。
第二个选择是,JIT作为真正的即时工作,这意味着在即将启动时转换代码块。整个应用程序不是在启动时翻译的,而是在启动时只翻译主函数,然后在某些代码块(函数等)运行时进行翻译。是使用的。此选项消耗的内存较少,但在运行期间应用程序要慢得多。
根据我发现的信息,Android使用的是第一个选项。应用程序在启动时被翻译,然后“几乎”以本地方式运行。这种“几乎”在JIT和AOT之间产生了主要的区别。
当您即将启动某个应用程序时,JIT只有有限的时间将所有字节码编译到CPU指令,以使启动延迟“可接受”很长时间。这意味着,它只能执行基本的优化。然而,当你安装一些应用程序,你通常有更多的时间来浪费,你只做了一次-不是在每次发射。这意味着AOT编译器有更多的时间来寻找如何优化应用程序的技巧。生成的代码应该更“高效”。第二个好处是,编译后的应用程序存储在缓存中,只有一部分可以在启动时加载到内存中。这意味着操作系统没有将整个代码保存在内存中,因此可以保存它。这是主要的区别。
问题的最后一部分-- Android上的艺术将在安装时执行编译(在将apk保存到/data/app/之后)。但是,如果删除该缓存,或者从Dalvik切换到ART,它将在第一次引导时编译所有已安装的应用程序,这可能需要10分钟甚至更长时间。
我也为我糟糕的英语感到抱歉,我是捷克人:-)
发布于 2022-10-09 15:12:21
先期(AOT)-- Android运行时(ART)--在安装过程中生成机器字节码。
https://stackoverflow.com/questions/20295548
复制相似问题