【编译】JITAOT介绍与优劣

news2024/11/19 11:17:24

文章目录

  • JIT
  • AOT
  • 二者区别
  • 来源

AOT 去年发布的 .NET 7 中引入了该功能,只是在 .NET 8 中进一步进行了改进。新版本中通过 Native AOT 发布的“Hello, World”应用程序体积进一步缩小,只有 .NET 7 的一半。

以 CoreCLR 为例,不做 AOT 编译的 asp.net core 网站项目,通常冷启动时间需要 150ms左右,但是启动后随着程序运行,JIT 再次生成更优的代码,甚至会为频繁使用的泛型类特化出一套实现;而经过 ReadyToRun 技术编译初始化部分,可以既保留 JIT,同时将程序初始化的部分采用 AOT 技术加速,将启动时间减少到 80ms 左右;最后是纯 AOT,采用CoreRT 编译后,启动速度可以直接达到 10ms 以下。

AWS 的 FaaS 服务中,.NET Core 的函数计算服务利用 ReadyToRun/CoreRT 等技术,使得其启动速度成为冠军。

不过 .NET Core 内存占用本身就非常小,进行 AOT 编译带来的内存占用优势几乎可以忽略不计,然而 Full AOT 却使得很多高级特性无法实现,例如表达式树动态生成 IL 等。对于 .NET Core 来说,AOT 相对于 JIT 的优势,除了可以得到更小的程序之外,并不明显。

至于 Java/JVM,AOT 技术肯定也是有的,其相对原 JIT 方案,我觉得无论是启动速度还是内存占用上最应该都能有相当大的改善,因为现在的 Java 启动速度和内存占用实在是不忍直视。
在这里插入图片描述

JIT

JIT,即Just-in-time,动态(即时)编译,边运行边编译;

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

吞吐量高,有运行时性能加成,可以跑得更快,并可以做到动态生成代码

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

相对启动速度较慢,并需要一定时间和调用频率才能触发 JIT 的分层机制

AOT

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

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

内存占用低,启动速度快,可以无需 runtime 运行,直接将 runtime 静态链接至最终的程序中

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

无运行时性能加成,不能根据程序运行情况做进一步的优化

二者区别

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

来源

对比JIT和AOT,各自有什么优点与缺点?
AOT,JIT区别,各自优劣,混合编译

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux进程信号(上)

目录 一:信号引入 二:信号保存方式 三:信号处理方式 四:查看Linux信号 五:信号捕捉 六:信号产生 一:终端按键产生信号 二:系统函数产生信号 2.1:kill(&#xff…

安全测试:配置管理潜在威胁

一、配置管理威胁有哪些 明文信息传输漏洞敏感信息泄露默认或可猜解用户账户会话重放攻击测试验证码缺陷http方法测试 二、明文信息传输和存储漏洞 漏洞描述: 页面中没有对传输的用户名和密码等敏感信息进行加密后传输。用户密码后台存储是否加密。 产生原因&a…

MySQL安装版步骤

百度网盘有安装版、解压包安装包以及visual插件 链接:https://pan.baidu.com/s/1XXvWa40FYX5mtqofW_knIg 提取码:ky2q 下载地址https://downloads.mysql.com/archives/installer/ 双击下载好的exe文件,选择Custom自定义安装,点…

内联函数-取决于编译器

内联函数 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 内联函数完美解决了宏函数上述所以缺点,但是不是所有函数都要搞成内联函数&#…

CentOS7(一)安装和基础配置

文章目录 一、CentOs 7 下载与安装二、安装过程三、安装Ohmyzsh1、基础软件安装2、编辑 install.sh4、修改仓库地址5、修改shell6、编辑主题和插件7、刷新配置8、创建用户级别配置文件 四、研发环境配置四、centos不能访问github,速度慢五、防火墙相关六、wget 下载…

Scala中的Map 集合详解

目录 一、不可变长Map集合 1.map的声明与遍历 2.map的常用方法:get、getOrElse、keys、values、、: 二、可变长Map集合 三、Map的其他方法 key -> value 的语法形式实际上是用库中的隐式转换实现的,实际调用了 Map.apply 方法。Map.a…

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-…

我看谁没看过

vue在新窗口打开页面方法 const { href } this.$router.resolve({path: "/officePlatform/addPrompt"});window.open(href, "_blank"); 添加圆形标志 h3::before {content: "";display: inline-block;width: 13px;height: 13px;background: va…

易点易动设备管理平台帮助化工企业实现设备高效管理

在现代化工企业中,设备管理和能耗监控是至关重要的。易点易动设备管理平台通过整合设备台账、巡检、维修、保养、备件管理、设备监控和能耗监控功能,为化工企业提供了一套全面、高效的解决方案。本文将详细介绍易点易动设备管理平台如何帮助化工企业实现…

JVM字节码分析

文章目录 1、类文件结构1.1、 魔数1.2、 版本1.3 、常量池1.4、 访问标识与继承信息1.5、 Field 信息1.6、 Method 信息1.7 、附加属性 2、字节码指令2.1、javap工具2.2、图解方法执行流程2.2.1 常量池载入运行时常量池2.2.2 方法字节码载入方法区2.2.3 main线程开始运行&#…

windows下另一种傻瓜式从零部署cuda环境的方式

前言 最近因为连续部署了两个深度学习环境,实在嫌烦了,于是摸索出一条简便的方式希望让人人都可以傻瓜式的快速部署,首先确保你的硬盘具有20G以上的空间,这里以部署torch的gpu版和让onnxruntime使用cuda加速为例,让我…

PDF.js源码使用总结

1、官网地址 pdf.js官网(http://mozilla.github.io/pdf.js/) pdf.js源码(https://github.com/mozilla/pdf.js) 版本选择:点击Tags 2、选择对应版本zip包下载、解压 在进行npm install之前 (注意:node.js…

【c++初阶】:引用

c入门 一.概念二.使用三.应用四.常引用五.引用与指针 一.概念 c语言中我们常用指针找地址,但在c中,忽略了指针(当然也可以使用指针)。常用引用这个概念。 二.使用 可以看到这里的b和c本质上都是a,只是不同的称呼罢了。…

【NestJs】数据库重构

上一篇文章详细了介绍nestjs 配置数据库,有不懂的小伙伴可以先查看上一篇文章【NestJs】使用连接mysql企业级开发规范在继续往下。 今天这一篇文章主要是针对配置数据库的重构,使用代码规范,方便后期维护。 当应用变得复杂 我们需要借用TypeO…

webstorm常用快捷键

webstorm作为前端代码JavaScript开发的利器,真的特别好用,我就总结一下我工作中经常用到的快捷键,有些快捷键是我自定义配置的,是以mac电脑来总结这篇文章的,请知晓: 自定义配置快捷键: 常用快…

SpringCloud源码探析(五)-网关Gateway的使用

1.概述 在微服务架构中,网关提供了统一的对外访问入口(自身跨一个或多个服务),它保证了内部服务对外暴露的合理性与安全性、降低了服务之间访问的复杂性,是微服务架构中至关重要的一部分。在SpringCloud中网关主要包含…

让观众近距离感受如然之光 lipro智能家居成上海车展亮点之一

近段时间,上海国际车展如火如荼地举行,吸引了众多汽车厂商及相关企业参展。在本次展会上,星纪魅族集团也携手亿咖通科技,以联合参展的形式登陆「上海国际车展」 6.1号馆,共同展示智能汽车解决方案及产品创新。此外&…

第十四届蓝桥杯研究生组2023年省赛题解--全部采用Java语言实现

引言 今天现在这里 挖个坑,太忙了,这个专题不一样有时间补完,但我会尽力而为的。记录一下今天的日子:2023/04/21 看看这个坑要什么时候自己才能补完。 题目pdf下载:第十四届蓝桥杯研究生组pdf下载 在此特别感谢博主…

flac转换成mp3,4种方法教会你

怎么把flac转换成mp3?由于互联网技术的不断提升,我们每天接触到的各种音频格式变得越来越多样化。然而,有些特殊格式的音频会在处理时带来一定困难,因为它们的兼容性较差,不能在常用播放器上正常播放,这就给…

React面试题

React 如何创建一个react的项目(使用脚手架) 安装cr脚手架:npm install -g create-react-app进入文件夹:create-react-app 项目名称进入项目:cd 项目名称运行项目:npm start 如何不使用脚手架创建一个项…