在Marshmallow,有一个AOT编译器添加了ART.来自Android N的另一个编译器JIT另外添加了AOT.

我的问题是什么是AOT编译器特定的作业/功能以及什么是JIT编译器作业/功能.

解决方法:

在Android Java类中转换为DEX字节码.

DEX字节码格式通过ART或Dalvik运行时转换为本机机器码.

Dalvik is a JIT (Just in time) compilation based engine. There were

drawbacks to use Dalvik hence from Android 4.4 (kitkat) ART was

introduced as a runtime and from Android 5.0 (Lollipop) it has

completely replaced Dalvik. Android 7.0 adds a just-in-time (JIT)

compiler with code profiling to Android runtime (ART) that constantly

improves the performance of Android apps as they run.

(Dalvik使用JIT(及时)编译,而ART使用AOT(Ahead of time)编译.)

及时(JIT):

使用Dalvik JIT编译器,每次运行应用程序时,它都会动态地将Dalvik字节码的一部分转换为机器代码.随着执行的进行,编译和缓存更多的字节码.由于JIT仅编译代码的一部分,因此它具有较小的内存占用并且在设备上使用较少的物理空间.

提前(AOT):

ART配备了Ahead-of-Time编译器.在应用程序的安装阶段,它会将DEX字节码静态转换为机器代码并存储在设备的存储中.这是在设备上安装应用程序时发生的一次性事件.

Android N包含一个混合运行时:

安装过程中不会有任何编译,应用程序可以立即启动,

字节码被解释. ART中有一个新的,更快的解释器,它伴随着一个新的JIT,但JIT信息不会持久存在.

而是在执行期间对代码进行分析,并保存结果数据.

ART的好处:

>在安装过程中完成DEX字节码转换后,应用程序运行得更快.

>直接执行本机代码,减少应用程序的启动时间.

>提高电池性能,因为用于逐行解释字节代码的功率得以保存.

>改进垃圾收集器.

ART的缺点:

>由于在安装过程中将DEX字节码转换为机器代码,因此App安装需要更多时间.

>由于安装时生成的本机代码存储在内部存储中,因此需要更多内部存储.

标签:android,jit,android-6-0-marshmallow,android-7-0-nougat

来源: https://codeday.me/bug/20190611/1218645.html

java jit aot_AOT和JIT编译器之间的区别android相关推荐

  1. Java中类、抽象类、接口之间的区别和联系。

    Java中类.抽象类.接口之间的区别和联系. 程序设计所面对的问题域--客观世界,是由许多事物构成的,这些事物既可以是有形的(比如一辆汽车),也可以是无形的(比如一次会议).把客观世界中的事物映射到面 ...

  2. java minor gc 停时,java Minor GC、 Full GC之间的区别

    Java Minor GC. Full GC之间的区别 Minor GC Minor GC 指发生在新生代(分为Eden区和Survivor区)的一系列垃圾回收操作,当新生代内存不足,无法给新的新生代 ...

  3. java se 与j2se_关于java:J2EE和J2SE项目之间的区别

    本问题已经有最佳答案,请猛点这里访问. 我已经从github下载了一个开源项目. 这是一个基于Maven的项目. 我如何理解该项目是J2SE项目还是J2EE项目? 这两种项目在结构上有何不同? Jav ...

  4. java execute、executeQuery和executeUpdate之间的区别

    在用纯JSP做一个页面报警功能的时候习惯性的用executeQuery来执行SQL语句,结果执行update时就遇到问题,语句能执行,但返回结果出现问题,另外还忽略了executeUpdate的返回值 ...

  5. Java系列之JDBC和ODBC之间的区别与联系

    JDBC简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,它是Java十三个规范之一.可以为多种关系数据库提供统一 ...

  6. java设计模式---三种工厂模式之间的区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  7. Java中List和Map接口之间的区别

    列表与地图界面 (List vs Map interface) Here, we will see how List differs from Map interface in Java and we ...

  8. JAVA中的Exception和Error之间的区别

    请对比Exception和Error,另外,运行时异常与异常有什么区别? 典型回答: Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例可以被抛 ...

  9. java allocatedirect_ByteBuffer.allocateDirect()和MappedByteBuffer.load()之间的区别

    我试图通过使用MappedByteBuffer映射特定文件的内存实现两个或多个JVM之间的共享缓存.从规范中我看到,当我们使用MappedByteBuffer.load()时,它应该将数据加载到直接缓 ...

最新文章

  1. php5.6 和apache2.2的相互配置
  2. XP快速启动栏里的显示桌面没有了,其他的都还在,应该怎么再添加进去?
  3. Python中的进制书写
  4. 重载练习2_判断方法的正确重载
  5. 专业软件 —— 硬件评测
  6. 你和数据分析大神之间,就差这7个沟通技巧
  7. Gamma函数(伽玛函数)的一阶导数、二阶导数公式推导及java程序
  8. 在mac上安装python版的hanlp/JPype1
  9. 自己实现一个右滑删除的ListView
  10. 多线程,异步委托,同步委托几种方式的区别
  11. Socket开发框架之消息的回调处理
  12. Node聊天程序实例04:chat_ui.js
  13. mysql 触发器 lod_MySQL--初探触发器的使用和理解
  14. 走进 Growth Hacker 的世界
  15. 双足机器人重心在头部_双足行走机器人及其重心调节装置制造方法及图纸
  16. 计算机装系统找不到硬盘分区,U盘重装系统找不到硬盘分区怎么办|安装系统找不到硬盘分区...
  17. 供水供气管道泄漏监测系统原理
  18. Pytorch是什么?Pytorch能用来干什么?
  19. 微信小程序 canIUse
  20. 用Ajax+js+jQuery实现无闪烁定时刷新页面 定时刷新

热门文章

  1. 第21课 Altium Designer20(AD20)+VESC6.4实战教程:走线和扇孔1 (北冥有鱼)
  2. 重装系统怎么找回文件数据恢复
  3. asp mysql 可编辑树状,基于数据库动态生成树形目录-ASP教程,数据库相关
  4. 降压电荷泵原理详细介绍
  5. php interface理解与实例
  6. CCV入门教程(二)
  7. 新股民快速成为股市高手的八招
  8. seresnet50训练自己的数据集_SSD框架训练自己的数据集
  9. linux端口映射转发工具rinetd安装使用
  10. 火鸟字幕合并器开源了,大家去参与开发和下载代码吧