Android编译器,架构和运行时,它们如何协同工作?

Android编译器,架构和运行时,它们如何协同工作?,第1张

概述我最近正在研究Android运行时,尤其是专注于dex2oat工具.但是dex2oat不是孤立的,而是可以与Android的启动映像,android-root,指令集,runtime-arg等一起使用.谁能解释他们的意思和用途?和他们的内部联系?解决方法:好的,dex2oat是新的AndroidRuntime(ART)的一部分.这个想法是用一个提

我最近正在研究Android运行时,尤其是专注于dex2oat工具.但是dex2oat不是孤立的,而是可以与AndroID的启动映像,androID-root,指令集,runtime-arg等一起使用.

谁能解释他们的意思和用途?和他们的内部联系?

解决方法:

好的,dex2oat是新的AndroID Runtime(ART)的一部分.这个想法是用一个提前编译器代替AndroID的字节码解释器(和JIT编译器),并提供一个新的运行时来加载和执行编译的应用程序.

葡聚糖

dex2oat实用程序是一个完整的编译套件,它为AndroID当前运行的每个处理器平台提供了许多编译选项,多个编译器和代码生成后端.因此,如果有人在引用dex2oat,则意味着要使用AndroID AOT编译器(套件).它的输入格式是dex字节码,并且输出所谓的燕麦文件,它们是ELF共享对象.与解释(或JIT编译)相比,AOT编译的优点是,如果我们在应用程序之前进行更复杂的优化,则不会降低执行时间.此外,正如我们所讨论的设备上编译器一样,应用程序仍可以以dex字节码的形式提供,但会针对其具体架构在设备上进行编译.因此,据我所知,目前有用于32位和64位的ARM,MIPS和x86后端.

启动映像

在Pre-ART之前,AndroID使用Zygote来分叉每个应用程序进程,并预加载和预初始化一些类以进行优化.在ART上,应预加载到每个应用程序进程中的jar库集会一次编译成所谓的启动映像.它由两个文件boot.oat和boot.art组成. Boot.oat包含已编译的代码,而boot.art包含预初始化的堆等.两者均由dex2oat生成.此引导映像作为优化加载到每个应用程序的进程中.

运行环境

现在,由于应用程序已编译为燕麦文件,因此ART提供了一个新的运行时来加载和执行它们.因此,其想法是将ELF共享对象加载到预初始化的应用程序进程中并执行该应用程序.由于代码已经编译,因此无需在运行时进行解释.一些例外情况是在永久性存储空间较低(燕麦文件很大)上运行的系统,已调试的应用程序等.在这些情况下,ART可能会引起解释.但通常,编译应用程序AOT是新的默认设置.

总结

以上是内存溢出为你收集整理的Android编译器,架构和运行时,它们如何协同工作?全部内容,希望文章能够帮你解决Android编译器,架构和运行时,它们如何协同工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1079061.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存