Android JIT(Just-In-Time)编译是一种动态编译技术,在运行时将字节码转换为机器码,以提高应用程序的执行效率。与静态编译不同,JIT编译是在应用程序运行时进行的,因此可以在程序执行期间进行优化。

JIT编译的工作原理

  1. 启动时解释执行:应用程序启动时,字节码通过解释器逐行执行,确保启动速度快。
  2. 热路径检测:运行过程中,JIT编译器监视哪些方法或代码片段执行频繁(热路径)。
  3. 即时编译:对于频繁执行的代码,JIT编译器将其编译为机器码,以提高后续执行速度。
  4. 优化和缓存:编译后的机器码可能会被缓存,以便下次直接使用,进一步提高性能。

不同Android版本中的JIT表现

  1. Dalvik VM(Android 2.2 Froyo引入JIT)
  • 最早在Android 2.2(Froyo)中引入了JIT编译,显著提高了应用的执行速度。
  • Dalvik JIT主要是对热路径进行编译,提升了CPU密集型任务的性能。
  1. ART(Android Runtime,Android 4.4 KitKat引入,Android 5.0 Lollipop默认使用)
  • ART在Android 4.4中首次引入,作为Dalvik的替代品,主要特点是引入了Ahead-of-Time(AOT)编译。
  • 在Android 5.0中,ART成为默认的运行时环境。AOT编译在安装应用时将字节码预编译为机器码,减少了运行时的开销。
  • JIT在ART中仍然存在,但更多的是辅助AOT编译,例如在运行时进行一些额外的优化。
  1. Android 7.0 Nougat引入的新JIT编译器
  • Android 7.0(Nougat)中引入了一个新的JIT编译器和配置文件引导的编译(Profile Guided Compilation,PGC)。
  • 新JIT编译器可以在设备上运行时动态优化应用,并在下次启动时结合AOT编译进行更好的性能优化。
  • 这种混合模式(JIT + AOT)使应用启动速度更快,同时运行时性能也得到了提升。

版本间的差异总结

  • Android 2.2 - 4.4:主要是Dalvik VM的JIT,专注于运行时的热路径优化。
  • Android 5.0 - 6.0:ART取代了Dalvik,主要依赖AOT编译,但仍保留了一些JIT功能。
  • Android 7.0及以后:引入了新的JIT编译器,结合PGC,使用混合模式(JIT + AOT)进一步优化应用性能。

每个版本的JIT实现和优化策略有所不同,但总体目标都是在不影响启动时间的前提下,尽可能提升应用程序的运行时性能。

Android JIT的更多相关文章

  1. Android JIT实时编译器的设置

    在Android  JIT实时编译是在Android 2.2之后才引入的,JIT编译器可以显著的提高机器的性能,经过测试,android 2.2的性能较android 2.1提高了 2-5倍.JIT提 ...

  2. Xamarin vs React Native vs Ionic vs NativeScript: Cross-platform Mobile Frameworks Comparison

    CONTENTS Reading time: 14 minutes Cross-platform mobile development has long been a viable alternati ...

  3. Android里的 ART、JIT、AOT、Dalvik之间有什么关系?

    ART.JIT.AOT.Dalvik之间有什么关系? JIT与Dalvik JIT是"Just In Time Compiler"的缩写,就是"即时编译技术", ...

  4. Android里的Dalvik、ART、JIT、AOT有什么关系?

    JIT,Just-in-time,即时编译,边运行边编译: AOT,Ahead Of Time,提前编译,指运行前编译. 区别 这两种编译方式的主要区别在于是否在“运行时”进行编译 优劣JIT优点: ...

  5. Android N开发 你需要知道的一切

    title: Android N开发 你需要知道的一切 tags: Android N,Android7.0,Android --- 转载请注明出处:http://www.cnblogs.com/yi ...

  6. Xamarin体验:使用C#开发iOS/Android应用

    Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发.   简介 Xamarin是基于Mo ...

  7. (转) Android开发性能优化简介

    作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...

  8. Android系统build.prop文件

    # begin build properties (开始设置系统性能) # autogenerated by buildinfo.sh (通过设置形成系统信息) ro.build.id=GRI40 ( ...

  9. Android Lint Checks

    Android Lint Checks Here are the current list of checks that lint performs as of Android Studio 2.3 ...

  10. 在vs2012中用C#开发Android应用Xamarin环境搭建

    Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发. 简介 Xamarin是基于Mono ...

随机推荐

  1. 【转载】 自然梯度法(Natural Gradient)

    原文地址: https://blog.csdn.net/philthinker/article/details/80615122 ----------------------------------- ...

  2. 不务正业的再次胡想——chatgpt在“智能辅助编程”外的另一个可能场景"智能论文写作辅助”

    在chatgpt4出来后震惊了很多人,但是很多人也觉得好像用处不大:可以说chatgpt4确实更加智能了,在语言对话上更加的智能,很多情况下已经很难分辨出这货是个机器人,但是现在这东西好像确实也没有太 ...

  3. csv导入导出组件jcsv

    jcsv 介绍 jcsv一个简单的.轻量级的csv导入.导出库,相对于opencsv与javacsv,jcsv侧重于导入导出,包括导入校验.导出模板等. 源代码地址:https://gitee.com ...

  4. Linux程序之可变参数&&选项那些事!

    一.linux应用程序如何接收参数? 1. argc.argv Linux应用程序执行时,我们往往通过命令行带入参数给程序,比如 ls /dev/ -l 其中参数 /dev/ .-l都是作为参数传递给 ...

  5. 网卡DM9000裸机驱动详解

    一.网卡 1. 概念 网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件.由于其拥有MAC地址,因此属于OSI模型的第2层.它使得用户可以通过电缆或无线相互连接. 每一个网卡都有一个被称 ...

  6. zabbix功能应用

    一.zabbix简介 1.zabbix概述 zabbix:是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,能够监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通 ...

  7. 关于对 Tomcat 进行小版本升级的快速解决方案

    1.背景描述 原来的 Tomcat 在部署时,使用的是最新的版本 9.0.40 . 经过一段时间后,在原来的 Tomcat 版本中,发现存在漏洞. 因此,需要将旧版本(9.0.40)升级到没有漏洞的新 ...

  8. 使用 Docker 部署 FRP

    服务端 编写配置文件 vim ~/.config/frp/frps.toml bindPort = 7000 # Web Dashboard [webServer] addr = "0.0. ...

  9. 使用JDBC查询数据库会一次性加载所有数据吗

    前几天有个小伙伴说他有个疑问:当我们发起一个查询的时候,数据库服务器是把所有结果集都准备好,然后一次性返回给应用程序服务吗(因为他们生产有个服务因为一个报表查询搞宕机了). 这样想的原因很简单,假设那 ...

  10. 已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是

    已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是(). 解析:选D 两个升序合并为降序,操作就不多说了,两数列依次比较放入,其中一个数列结束了, ...