对比JIT和AOT,各自的优点与缺点

article/2025/10/4 2:42:05

编译器和解释器是什么

编译器和解释器的区别在于是否编译和执行过程是否是同时进行。

编译器所干的事,将一门语言 X 编译为另一门语言 Y (可以是语言 X、高级语言、低级语言等),整个编译过程涉及词法分析、语法分析、语义分析。该过程往往由程序员在编写程序时完成。

而解释器则直接将语言 X 编写的程序在目标机器上运行。CPU就可以被当作某种指令集合的解释器。事实上,CPU的指令集合可能比我们看到的更复杂,其内部由更多的私有指令集合组成,转化为可见的公有指令集合。

在这里插入图片描述

是什么

JIT

JIT编译器,英文写作Just-In-Time Compiler,中文意思是即时编译器。
JIT是一种提高程序运行效率的方法。通常,程序有两种运行方式:静态编译与动态解释。静态编译的程序在执行前全部被翻译为机器码,而动态解释执行的则是一句一句边运行边翻译。

AOT

AOT编译器, (Ahead-Of-Time)
AOT 编译器动态生成本机代码,而应用程序运行任何生成的 AOT 代码并将其高速缓存在共享数据高速缓存中。用于执行该方法的后续 JVM 可以从共享数据高速缓存装入和使用 AOT 代码,而不会导致 JIT 编译的本机代码遇到性能下降的问题。

缺省情况下,AOT 编译器为启用状态,但是只有在启用共享类时才处于活动状态。缺省情况下,共享类为禁用状态,因此不发生任何 AOT 活动。在 AOT 编译器处于活动状态时,该编译器会选择要进行 AOT 编译的方法,其主要目的是缩短启动时间。

对比

JIT:吞吐量高,有运行时性能加成,可以跑得更快,并可以做到动态生成代码等,但是相对启动速度较慢,并需要一定时间和调用频率才能触发 JIT 的分层机制

AOT:内存占用低,启动速度快,可以无需 runtime 运行,直接将 runtime 静态链接至最终的程序中,但是无运行时性能加成,不能根据程序运行情况做进一步的优化

以 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 的优势,除了可以得到更小的程序之外,并不明显。

JIT 页面渲染引擎

JIT 页面渲染是 COMSHARP CMS 为了实现网站内容即时更新而开发的页面生成技术,JIT页面渲染引擎直接从数据库获取网站最新内容,瞬间生成页面输出给访问者,并通过 URL 转写技术实现纯静态地址。

JIT 页面渲染技术是针对传统 CMS 生成静态 HTML 文件而言。传统 CMS 由于使用脚本代码模板技术,页面生成前,需要将数据库中的页面内容用外部模板进行解析与渲染,导致严重的性能问题,为了解决这个问题,传统 CMS 一般采用生成 HTML 静态文件技术,即,在内容创作完成后,对全站的内容执行一个静态 HTML 文件生成过程,最终,全站内容以静态 HTML 文件的形式存在。

静态 HTML 文件技术最显著的优势是性能出众,然而这种技术最严重的问题在于,用户对站点任何修改与更新,必须首先经过一次全站 HTML 文件重新生成过程,然后才能被访问者看到。根据不同 CMS 产品的性能和站点规模,这个 HTML 生成过程可能长到十几分钟到几十分钟或更长。

也有个别 CMS 产品使用触发式页面渲染模式,即内容更新后,并不立即生成 HTML 文件,而是在用户第一次访问该页面时,触发生成该页面的 HTML 文件,这种技术的问题在于,用户第一次访问被更新页面的时候,可能经历非常漫长的等待,因为站点内各个页面之间并非孤立的,他们可能相互引用,虽然访问的只是一个页面,为了对引用页面同步更新,需要重新生成 HTML 文件的页面可能有多个。

JIT 页面渲染如何工作?

COMSHARP CMS JIT 渲染引擎与传统 CMS 生成 HTML 静态页面模式对比
上图,是 COMSHARP CMS JIT 渲染引擎与传统 CMS 生成 HTML 静态页面模式对比。

可以看出,JIT 渲染引擎直接将网站最新内容从数据库渲染给访问用户,而传统 CMS 的站点内容在到达访问用户之前,首先要经历一个 HTML 的转换过程。

COMSHARP CMS JIT 页面渲染如何实现毫秒级的渲染速度?

COMSHARP CMS 在页面渲染的时候,JIT 引擎可以在数十毫秒的时间内容完整整个页面的生成,这样就保证用户访问的时候,不会因 JIT 渲染造成延迟。事实上,COMSHARP CMS 网站访问速度只取决于服务器带宽,页面生成过程带来的延迟可以忽略不计。
 我们有两项技术保证这样的性能:
 编译级主题模板 COMSHARP CMS 的编译级主题模板直接内嵌在系统的 DLL 中,主题模板的套用是在运行时(Run Time)完成,这和传统 CMS 的调用脚本代码模板解释运行是截然不同。


http://chatgpt.dhexx.cn/article/aA5Br8m3.shtml

相关文章

AOT(超前编译)实例分析

文章目录 一、背景二、具体实施2.1 tfcomfile 是什么?2.2 tfcompile 的功能是什么?2.3使用tfcompile 三、总结 一、背景 前边已经了解了JIT和AOT的基本概念,AOT(提前编译)方式就是在代码执行阶段之前全部编译成目标指令,进入执行…

Java在云原生的破局利器——AOT(JIT与AOT)

导读 JIT(Just-in-Time,实时编译)一直是Java语言的灵魂特性之一,与之相对的AOT(Ahead-of-Time,预编译)方式,似乎长久以来和Java语言都没有什么太大的关系。但是近年来随着Serverles…

AOT概述

11.1、AOT概述 11.1.1、JIT与AOT的区别 JIT和AOT 这个名词是指两种不同的编译方式,这两种编译方式的主要区别在于是否在“运行时”进行编译 (1)JIT, Just-in-time,动态(即时)编译,边运行边编译; 在程序…

Python interpreter state is not initialized. The process may be terminated.

Error occurred when finalizing GeneratorDataset iterator: Failed precondition: Python interpreter state is not initialized. The process may be terminated. [[{{node PyFunc}}]] 当我在使用TensorFlow训练时,出现以上错误。 我也曾以为是&#xff…

subprocess.CalledProcessError: Command ‘[where, cl]‘ returned non-zero exit status 1

当运行程序时,程序报错最后一行错误输出为 subprocess.CalledProcessError: Command [where, c1] returned non-zero exit status 1时,我们把输出得错误往前翻看,如果,报错得第一行 是UserWarning: Error checking compiler vers…

Problem Solving Process of The terminal process terminated with exit code 1

参考前辈的配置VScode C/C环境的经验: 成成赐我力量 bat67 参考之后我的配置 c_cpp_properties.json "configurations": [{"name": "Mac","includePath": ["/usr/include"],"browse" : {"limitS…

compilation terminated.

wqlubuntu:~/Linux/COURSE$ gcc -o fork.c test.c gcc: error: test.c: No such file or directory gcc: fatal error: no input files compilation terminated.今天在编译一个文件时,发现了以上很诡异的情况(貌似我平时也是这样编译的啊,&am…

Try to run this command from the system terminal. Make sure that you use the问题,亲测已解决

今天使用python的时候,想要导包出现了这种问题 直接进入主题, 个人觉得是因为python和Pip的版本不匹配,我是使用的python3.7然后pip使用的是22.4 导致报错,我就把pip退回一下成为20.2.4的,然后就成功了,注意…

Error: spawn cmd ENOENT at Process.ChildProcess._handle.onexit

解决方案:在系统变量 Path 里面加上:%SystemRoot%\system32,关掉终端,重新启动项目。 详细步骤: 1、点击自己的 此电脑 ,右键 属性(R) ; ​ 2、找到 高级系统设置 ; ​ 3、点击 高级 &#x…

Process terminated

idea点击maven下的install出现错误 解决方法:更换maven进行重新配置 1、环境变量中找到MAVEN_HOME,修改新Maven的存放路径 2、修改maven相关配置 方法一:如下图 方法二:File --》 settings (快捷键:Ctr…

406错误

当请求的url后缀为.hml 并且传到页面的数据类型是json时,就会出现406, 解决: 在web.xml中添加一个mapping,然后访问url后缀改为.action

KBL406-ASEMI插件整流桥KBL406

编辑:ll KBL406-ASEMI插件整流桥KBL406 型号:KBL406 品牌:ASEMI 封装:KBL-4 特性:整流桥 正向电流:4A 反向耐压:600V 恢复时间:>2000ns 引脚数量:4 芯片个数…

记录一次生产环境偶发HTTP响应406报错问题

背景 今天在生产环境碰到了一个不算复杂,但是容易让人抓狂的问题。我们的一个Rest接口偶发的报406错误,只在生产环境中出现,大致估算是三千次调用中会出现十几次的这个错误,在测试环境一直无法复现。 首先查了下HTTP的406状态码语…

openresty线上406 Not Acceptable实战排查

因为公司需要对接平台业务,然后其中肯定离不开nginx来做代理转发的,而且我们没有http的地址,全是对外暴露的https的地址。今天就遇到了一些问题,在对接平台的时候它们调过来经过nginx总是406报错,今天我就带大家一起揭…

html报406错误,Ajax请求出现406的原因和解决方法

一般出现406错误有两种可能: 1、如果后缀是html是不能响应json数据的。需要修改后缀名。 在做伪静态化过程中,以.html结尾的后缀,做post请求时,不能响应json格式,这是spring官方做出的处理 可以加一个后缀改为.action …

SpringMVC在返回JSON数据时出现406错误解决方案

在SpringMVC框架的使用中常常会使用ResponseBody注解,修饰“处理器”(Controller的方法),这样在处理器在返回完毕后,就不走逻辑视图,而是将返回的对象转成JSON字符串响应给客户端,但这种操作有时…

Spring MVC 406

使用Spring MVC返回 JSON 数据有时候会在页面报出以下 406 错误。具体错误信息如下: 最常见的问题就是缺少 Jackson 工具包,它的作用是把 Java 对象转换成 JSON 输入出页面。当然这是最常见的情况,下面我就来介绍一下项目中出现的问题。由于项…

Sense 406错误

原来Sense 0.9.0 版本不能支持elasticsearch6.x 参考{https://blog.csdn.net/xieshanwu/article/details/78667881} 使用Chrome浏览器插件sense请求时,报错406 查询官方文档得到说明,从6.0版本开始,本次请求必须加上正确的 Content-Type&am…

406

The resource identified by this request is only capable of generating responses with characteristics not acceptable according to the request "accept" headers ()。 出现的解决办法 有可能是调用的方法中requestMapper中写的produces" text/xml;chars…