JIT与AOT

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

名词解释:
JIT(JUST - IN -TIME)实时编译
AOT(AHEAD-OF-TIME)预先编译

它们两者最根本的区别,就在于编译代码的时机,所谓的编译代码,就是把人类写的代码,翻译成机器字节码指令这么一个过程。

优缺点:

JIT优点:

1·可以实时根据硬件资源情况实时编译生成最优指令。
2·能实现动态链接,动态编译加载需要用到的模块代码,节省内存空间
3·能通过程序运行中内存和磁盘空间使用率情况,定位代码优化点(这是AOT无法做到的)

JIT缺点:

1·边运行边编译,会造成进程的卡顿,编译的同时收集编译信息,虽然会进行动态优化(例如热点代码热点方法等),但是会占用更多的内存资源
2·第一次编译运行时候较慢

方法内联:

假设一个方法checkUser,每一个接口都需要调用,用于校验身份和权限,按照方法的入栈出栈,这个方法会被每一个工作线程不停压入自己的私有栈中,执行完该方法后,再跳转回上一个方法,这样性能不高,而JIT优化中的一点方法内联,则支持将该方法代码复制到调用方法中,从而避免发生真实的方法调用,也就是checkUser的代码过来就好,它自身不要压进来。而JIT要实现这一点优化,很明显要有个地方保存类似“方法编译记录”之类的缓存,而这也可以理解为什么JIT更加占用内存以及支持更高的吞吐量

AOT优点:

1·程序运行前就编译完成,使得编译工作不会占用运行时资源,程序运行更加流畅
2·由于所有代码模块都已经预先编译完成,首次运行的性能表现较优异

AOT缺点:

1·程序更新和重新加载非常缓慢
2·模块代码统一编译打包了,不具备动态编译的优化,没有运行时的动态性能加成

参考一张百度图片
在这里插入图片描述

可以总结出:

AOT启动速度Startup Speed 占优,更低的内存占用,更小的打包
JIT峰值吞吐量Peak Throughput比较高,能减少延迟Reduced Max Latency
由于Java的跨平台性,能运行在多种安装了JRE环境的系统中,所以被很多终端应用选作为开发语言,而这也是Java9为了提高Java的性能,推出了AOT的原因。

各自的用途:

AOT适合客户端APP之类
JIT适合服务器端

怎么用?

看项目部署时候选择的对应的编译器,不同JDK版本不同的JVM虚拟机自带的编译器不同,或者通过配置也能修改编译方式的不同
这里另外一个博主的尝鲜教程:https://blog.csdn.net/weixin_39837867/article/details/114402561


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

相关文章

Spring6和SpringBoot3的新特性-你不得不了解的AOT原来这么简单

Spring6.0新特性 一、Spring的发展历史 二、AOT AOT是Spring6.0提供的一个新特性,Ahead of Time 提前编译。 1.AOT概述 1.1 JIT和AOT的关系 1.1.1 JIT JIT(Just-in-time) 动态编译,即时编译,也就是边运行边编译,也就是在程序运…

JIT VS AOT

一、AOT,JIT是什么 JIT,即Just-in-time,动态(即时)编译,边运行边编译;AOT,Ahead Of Time,指运行前编译,是两种程序的编译方式 理解 jit、aot 程序主要有两种运行方式:静态编译与动…

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

编译器和解释器是什么 编译器和解释器的区别在于是否编译和执行过程是否是同时进行。 编译器所干的事,将一门语言 X 编译为另一门语言 Y (可以是语言 X、高级语言、低级语言等),整个编译过程涉及词法分析、语法分析、语义分析。…

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字符串响应给客户端,但这种操作有时…