JIT,Just-in-time,即时编译,边运行边编译;

AOT,Ahead Of Time,提前编译,指运行前编译。

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

优劣
JIT优点:
  可以根据当前硬件情况实时编译生成最优机器指令(ps. AOT也可以做到,在用户使用时使用字节码根据机器情况在做一次编译)
  可以根据当前程序的运行情况生成最优的机器指令序列
  当程序需要支持动态链接时,只能使用JIT
  可以根据进程中内存的实际情况调整代码,使内存能够更充分的利用
JIT缺点:
  编译需要占用运行时资源,会导致进程卡顿
  由于编译时间需要占用运行时间,对于某些代码的编译优化不能完全支持,需要在程序流畅和编译时间之间做权衡
  在编译准备和识别频繁使用的方法需要占用时间,使得初始编译不能达到最高性能

AOT优点:
  在程序运行前编译,可以避免在运行时的编译性能消耗和内存消耗
  可以在程序运行初期就达到最高性能
  可以显著的加快程序的启动
AOT缺点:
  在程序运行前编译会使程序安装的时间增加
  牺牲Java的一致性
  将提前编译的内容保存会占用更多的外

与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编译生成可执行文件保存到本地,待下次运行时直接使用,并且不断监视代码的更新,在代码有更新后重新生成可执行文件。

原文:https://www.cnblogs.com/linghu-java/p/10577515.html

最新文章

  1. Vue + Webpack + Vue-loader 系列教程(2)相关配置篇
  2. Android总结之Gzip/Zip压缩
  3. haha3
  4. home键通知
  5. poj1987 Distance Statistics
  6. angular todo
  7. android adb经常使用的命令
  8. highcharts设置Y轴范围及根据Y轴范围设置不同颜色
  9. mysql远程连接权限
  10. JAVA基础知识(2)--队列的操作
  11. DevTool开发者工具
  12. bzoj 4823: [Cqoi2017]老C的方块 [最小割]
  13. android:layout_weight属性详解
  14. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇)(1) - 目录
  15. Tornado-Ajax
  16. Linux脚本点滴
  17. 树莓派上使用DHCPig进行DHCP池耗尽攻击
  18. PHP AES加密解密。
  19. Java的WAR包文件分析
  20. tensorflow summary

热门文章

  1. MySQL Group By 实例讲解(一)
  2. 清理收藏夹中的CSS
  3. 微信小程序实例:分享给一个人还是分享到群的判断代码
  4. Xamarin图表开发基础教程(6)OxyPlot框架
  5. [LeetCode] 204. Count Primes 计数质数
  6. [LeetCode] 496. Next Greater Element I 下一个较大的元素 I
  7. 消息发送函数OSMboxPostOpt()
  8. iOS:Xcode代码块,提升敲代码的效率
  9. 八、spring生命周期之BeanPostProcessor
  10. @Component和@Configuration作为配置类的差别