JIT与AOT编译

use*_*390 15 android jit compilation

这个问题与android系统有关. Dalvik VM使用JIT概念,这意味着当您第一次运行应用程序时,Dalvik VM会将其编译并加载到RAM中,只要它可以保留在那里.我理解这个概念.但是名为ART的新虚拟机使用了AOT方法.ART在安装后编译应用程序(或安装时?).这意味着什么?由编译的应用程序ART是相同的已编译的应用程序(如C的应用程序),但在从操作系统的其余部分分离的分离工艺运行?有人可以更彻底地向我解释这个概念.我必须做一些介绍,这是在那里提到的,但是我不明白这个概念,如果有人问我这个问题,我不想看起来很蠢:)抱歉因为英语不好,如果有人会很好可以编辑一下问题.

mic*_*.cz 10

我并不完全熟悉Android上的Dalvik JIT如何在实践中工作,因为JIT有多种选择如何工作.

第一个选项是,JIT在应用程序启动时将所有字节码转换为CPU指令.此选项在应用程序启动之前花了一些时间,之后该应用程序可以作为本机运行.问题是,翻译的应用程序必须在启动期间保留在内存中,这并不好.

第二种选择是,JIT作为真正的即时工作,这意味着在即将启动时转换代码块.整个应用程序在启动时不会被翻译,但只有主要功能在启动时被翻译,然后在运行期间被翻译,当使用某些代码块(功能等)时.此选项占用的内存较少,但在运行期间应用程序会慢得多.

根据我发现的信息,Android使用第一个选项.应用程序在发布时被翻译,之后它几乎"本地"运行.这种"几乎"使JIT和AOT之间存在重大差异.

当你即将推出的一些应用程序,JIT只有有限的时间来编译所有的代码都会给CPU指令,使启动滞后"可以接受的"长.这意味着,它只能执行基本优化.但是,当您安装某个应用程序时,通常会有更多时间浪费,而且您只需要执行一次 - 而不是每次启动时都这样做.这意味着AOT编译器有更多的时间来找到如何优化该应用程序的技巧.结果代码应该更"有效".第二个好处是,已编译的应用程序存储在缓存中,并且只有部分应用程序可以在启动时加载到内存中.这意味着操作系统没有将整个代码保存在内存中并且可以保存它.这是主要的区别.

问题的最后一部分--Android上的ART将在安装时执行编译(将apk保存到/ data/app /后).但是,如果您擦除该缓存,或从Dalvik切换到ART,它将在首次启动时编译所有已安装的应用程序,这可能需要10分钟甚至更长时间.

抱歉我的英语也不好,我是捷克人:-)