首页 > 其他分享 >Android JIT

Android JIT

时间:2024-07-18 10:55:32浏览次数:11  
标签:Dalvik 编译器 编译 JIT AOT Android

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实现和优化策略有所不同,但总体目标都是在不影响启动时间的前提下,尽可能提升应用程序的运行时性能。

标签:Dalvik,编译器,编译,JIT,AOT,Android
From: https://www.cnblogs.com/linhaostudy/p/18308997

相关文章

  • Android 11 NavigationBar && Status Bar 如果改变背景颜色
    SystemUI的导航栏和状态栏的背景是大部分是根据当前应用的主题显示的,状态有黑,白,透明,半透明等.需求:要求背景不跟随栈顶应用主题变化,始终固定成一个颜色!/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java//NavigationBarView初始化pub......
  • Android init常用调试工具
    Android开机优化系列文档-CSDN博客Android14开机时间优化措施汇总-CSDN博客Android14开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客An......
  • Android开发 - 视图布局属性解析
    LinearLayout:主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件RelativeLayout:称作相对布局,非常常用的一种布局。和LinearLayout的排列规则不同,RelativeLayout显......
  • android开发基于Android10分析请求Zygote执行Fork一个新的应用程序的过程
    android开发基于Android10分析请求Zygote执行Fork一个新的应用程序的过程```ActivityTaskManagerService.activityPausedActivityStack.activityPausedLockedRootActivityContainer.resumeFocusedStacksTopActivitiesActivityStackSupervisor.startSpecificActivityLocked......
  • 针尖对麦芒!Anthropic 推出 Claude Android 可实时翻译!
    Anthropic,作为OpenAI的强劲对手,于本周二正式推出了专为Android用户设计的Claude应用程序,旨在通过拓宽Claude的接入平台,吸引用户从ChatGPT转向其服务。这款Android应用承袭了五月问世的iOS版本的设计理念,用户无需支付任何费用即可体验到Anthropic顶尖AI模型——Claude3.5Sonnet的......
  • Android |(十二)Glide v4 图片加载
    Github地址:https://github.com/bumptech/glide中文文档:Glidev4:快速高效的Android图片加载库一、添加依赖//settings.gradlerepositories{google()mavenCentral()}//build.gradle(app)dependencies{implementation("com.github.bump......
  • JetBrains家族| Android Studio快捷键
    一、JetBrainsIDE(一)什么是IDE?IDE,IntegratedDevelopmentEnvironment(集成开发环境)        是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具,集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套......
  • AndroidQ 打通应用层到HAL层---(HIDL服务实现)
    什么是HIDLHIDL全称为HALinterfacedefinitionlanguage(发音为“hide-l”)是用于指定HAL和其用户之间的接口的一种接口描述语言(IDL),AndroidO开始引入了HIDL这个概念,HIDL和应用层AIDL差不多,AIDL常用于连接App和Framework,HIDL则是用来连接Framework和HAL,AIDL使用Binder通信,HI......
  • Android Studio下载Gradle超时解决方案
    本文由ChatMoney团队出品AndroidStudio找到项目中gradle配置文件的路径,我的路径为/你的项目路径/gradle/wrapper/gradle-wrapper.properties,里面对应内容应该如下所示:#TueJun1116:15:13CST2024distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distsdi......
  • Android Studio下载Gradle超时解决方案
    本文由ChatMoney团队出品AndroidStudio找到项目中gradle配置文件的路径,我的路径为/你的项目路径/gradle/wrapper/gradle-wrapper.properties,里面对应内容应该如下所示:#TueJun1116:15:13CST2024distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distsdi......