必威体育Betway必威体育官网
当前位置:首页 > IT技术

AOT,JIT区别,各自优劣,混合编译

时间:2019-08-21 18:44:26来源:IT技术作者:seo实验室小编阅读:54次「手机版」
 

aot

AOT,JIT是什么?

JIT,即Just-in-time,动态(即时)编译,边运行边编译;AOT,Ahead Of Time,指运行前编译,是两种程序的编译方式

区别

这两种编译方式的主要区别在于是否在“运行时”进行编译

优劣

JIT优点:

  1. 可以根据当前硬件情况实时编译生成最优机器指令(ps. AOT也可以做到,在用户使用是使用字节码根据机器情况在做一次编译)
  2. 可以根据当前程序的运行情况生成最优的机器指令序列
  3. 当程序需要支持动态链接时,只能使用JIT
  4. 可以根据进程中内存的实际情况调整代码,使内存能够更充分的利用

JIT缺点:

  1. 编译需要占用运行时资源,会导致进程卡顿
  2. 由于编译时间需要占用运行时间,对于某些代码的编译优化不能完全支持,需要在程序流畅和编译时间之间做权衡
  3. 在编译准备和识别频繁使用的方法需要占用时间,使得初始编译不能达到最高性能

AOT优点:

  1. 在程序运行前编译,可以避免在运行时的编译性能消耗和内存消耗
  2. 可以在程序运行初期就达到最高性能
  3. 可以显著的加快程序的启动

AOT缺点:

  1. 在程序运行前编译会使程序安装的时间增加
  2. 牺牲java一致性
  3. 将提前编译的内容保存会占用更多的外

Android的关联

Android在2.2的时候引入JIT,在kitkat时新增了ART(Android runtime),在android l时使用ART完全替代了Dalvik作为默认的虚拟机环境。

Dalvik

  • Dalvik使用JIT
  • 使用.dex字节码,是针对Android设备优化后的DVM所使用的运行时编译字节码
  • .odex是对dex的优化,deodex在系统第一次开机时会提取所有apk内的dex文件,odex优化将dex提前提取出,加快了开机的速度和程序运行的速度

ART

  • ART 使用AOT
  • 在安装apk时会进行预编译,生成OAT文件,仍以.odex保存,但是与Dalvik下不同,这个文件是可执行文件
  • dex、odex 均可通过dex2oat生成oat文件,以实现兼容
  • 在大型应用安装时需要更多时间和空间

Android N引入的混合编译

在Android N中引入了一种新的编译模式,同时使用JIT和AOT。这是我在网上找到的一些解释:

包含了一个混合模式的运行时。应用在安装时不做编译,而是解释字节码,所以可以快速启动。ART中有一种新的、更快的解释器,通过一种新的JIT完成,但是这种JIT的信息不是持久化的。取而代之的是,代码在执行期间被分析,分析结果保存起来。然后,当设备空转和充电的时候,ART会执行针对“热代码”进行的基于分析的编译,其他代码不做编译。为了得到更优的代码,ART采用了几种技巧包括深度内联。

对同一个应用可以编译数次,或者找到变“热”的代码路径或者对已经编译的代码进行新的优化,这取决于分析器在随后的执行中的分析数据

这些大概说的是新的ART在安装程序时使用JIT,在JIT编译了一些代码后将这些代码保存到本地,等到设备空闲的时候将保存的这些代码使用AOT编译生成可执行文件保存到本地,待下次运行时直接使用,并且不断监视代码的更新,在代码有更新后重新生成可执行文件。

相关阅读

解决编译时出现的警告:format string is not a string

转载自:http://www.cocoachina.com/bbs/read.php?tid=87645在Xcode 4.2(iOS 5)之前,我猜大家都和我一样很喜欢下面的调试输出写法:?

Android Freeline加速编译App方案 使用和总结

Freeline简介 在Android Studio还没推出Instant Run功能之前,每次修改Android 工程项目时都要将整个项目重新编译一次,然后再将资

Javac编译器

 Javac编译器是把 *.java 文件转换为 *.class 文件,是一个前端编译器;对应着有一种把字节码转变为机器码的编译器,称为JIT编译器(Jus

【Oracle】存储过程的创建,查看,执行和重新编译;

我在参加【中原银行】的【极客大赛】,请大家支持下我的队伍,给【农夫种豆队】投上您宝贵的一票(微信,无需注册,无需填写手机号码,点击一

搭建魔兽世界服务端编译环境

这个是我第一次搭建魔兽的环境,我是以Trinity开始的一、搭建环境1 安装 Git Extensions 其中里面中Git、MySYSGit和KDiff这两个

分享到:

栏目导航

推荐阅读

热门阅读