提前编译:AOT

news2024/11/26 13:25:29

JIT与AOT的区别


IT和AOT这个名词是指两种不同的编译方式,这两种编译方式的主要区别在于是否在“运行时”进行编译


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


在程序运行时,根据算法计算出热点代码,然后进行JIT实时编译,这种方式吞吐量高,有运行时性能加成,可以跑得更快,并可以做到动态生成代码等,但是相对启动速度较慢,并需要一定时间和调用频率才能触发JIT 的分层机制。JIT 缺点就是编译需要占用运行时资源,会导致进程卡顿。


(2)AOT,Ahead ofTime,指运行前编译,预先编译


AOT编译能直接将源代码转化为机器码,内存占用低,启动速度快,可以无需runtime 运行,直接将runtime静态链接至最终的程序中,但是无运行时性能加成,不能根据程序运行情况做进一步的优化,AOT 缺点就是在程序运行前编译会使程序安装的时间增加。

简单来讲:

JIT即时编译指的是在程序的运行过程中,将字节码转换为可在硬件上直接运行的机器码,并部署至托管环境中的过程。

而AOT 编译指的则是,在程序运行之前,便将字节码转换为机器码的过程。

.java -> .class -> (使用jaotc编译工具) -> .so(程序函数库,即编译好的可以供其他程序使用的代码和数据)

(3)AOT的优点


简单来讲,Java 虚拟机加载已经预编译成二进制库,可以直接执行。不必等待及时编译器的预热,减少Java 应用给人带来“第一次运行慢”的不良体验


在程序运行前编译,可以避免在运行时的编译性能消耗和内存消耗

可以在程序运行初期就达到最高性能,程序启动速度快

运行产物只有机器码,打包体积小


(4)AOT的缺点


由于是静态提前编译,不能根据硬件情况或程序运行情况择优选择机器指令序列,理论峰值性能不如JIT没有动态能力,同一份产物不能跨平台运行


第一种即时编译(JIT)是默认模式,Java Hotspot 虚拟机使用它在运行时将字节码转换为机器码。后者提前编译(AOT)由新颖的GraalVM 编译器支持,并允许在构建时将字节码直接静态编译为机器码。


现在正处于云原生,降本增效的时代,java 相比于Go、Rust 等其他编程语言非常大的弊端就是启动编译和启动进程非常慢,这对于根据实时计算资源,弹性扩缩容的云原生技术相冲突,Spring6 借助AOT 技术在运行时内存占用低,启动速度快,逐渐的来满足Java 在云原生时代的需求,对于大规模使用Java 应用的商业公司可以考虑尽早调研使用JDK17,通过云原生技术为公司实现降本增效。

Graalvm


Spring6支持的AOT技术,这个GraalVM 就是底层的支持,Spring也对GraalVM 本机映像提供了一流的支持GraalVM 是一种高性能JDK,旨在加速用Java 和其他VM语言编写的应用程序的执行,同时还为JavaScript、Pvthon 和许多其他流行语言提供运行时。

GraalVM 提供两种运行Java 应用程序的方法:在HotSpotJVM 上使用Graal即时(JIT)编译器或作为提前(AOT)编译的本机可执行文件。GraalVM 的多语言能力使得在单个应用程序中混合多种编程语言成为可能,同时消除了外语调用成本。GraalVM 向 HotSpotJava 虚拟机添加了一个用Java编写的高级即时(JIT)优化编译器。


GraalVM 具有以下特性:
(1)一种高级优化编译器,它生成更快、更精简的代码,需要更少的计算资源


(2)AOT本机图像编译提前将Java 应用程序编译为本机二进制文件,立即启动,无需预热即可实现最高性能

(3)Polyglot 编程在单个应用程序中利用流行语言的最佳功能和库,无需额外开销


(4)高级工具在Java和多种语言中调试、监视、分析和优化资源消耗


总的来说对云原生的要求不算高短期内可以继续使用2.7.X 的版本和JDK8,不过Spring 官方已经对Spring6进行了正式版发布。

Native lmage


目前业界除了这种在IVM中进行AOT的方案,还有另外一种实现ava AOT的思路,那就是直接摒弃JVM,和C/C++一样通过编译器直接将代码编译成机器代码,然后运行。这无疑是一种直接颠覆Java语言设计的思路,那就是GraalVM Native lmage。

它通过语言实现了一个超微缩的运行时组件--Substrate VM,基本实现了JVM的各种特性,但足够轻量、可以被轻松内嵌,这就让lava语言和工程摆脱IVM的限制,能够真正意义上实现和C/C++一样的AOT编译。

这一方案在经过长时间的优化和积累后,已经拥有非常不错的效果,基本上成为Oracle官方首推的JavaAOT解决方案。

Native lmage 是一项创新技术,可将Java 代码编译成独立的本机可执行文件或本机共享库。在构建本机可执行文件期间处理的Java 字节码包括所有应用程序类、依赖项、第三方依赖库和任何所需的JDK 类。生成的自包含本机可执行文件特定于不需要JVM 的每个单独的操作系统和机器体系结构。

演示Native lmage构建过程

1.GraaIVM安装

下载GraaIVM

https://www.graalvm.org/downloads/

配置系统变量:

修改JAVA_HOME

 

修改Path目录:

使用命令查看是否安装成功

java -version

安装native-image插件

在cmd窗口,使用命令gu install native-image下载安装

使用命令gu list查看当前插件

2.安装c++编译环境

安装visual studio

https://visualstudio.microsoft.com/zh-hans/

添加visual studio环境变量

配置INCLUDE、LIB和Path

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

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

相关文章

低代码平台是什么?具备哪些特性?

目录 一、低代码开发概念 二、低代码开发和零代码开发的区别 三、低代码和零代码的开发优势 四、低代码开发平台介绍 JNPF开发平台 1)产品功能点 2)产品功能模块 五、小结 低代码开发平台近两年发展迅猛,并迅速渗透到各个细分领域。本文简要介…

【SQLite】的使用及指令| 编程操作(增删改查)

一、SQLite 使用和指令集 SQLite 的基本使用SQL 命令 二、常见的 SQL 数据类型 三、SQLite的命令用法 四、SQLite的编程操作 五、sqlite3_open函数 六、sqlite3_close函数 七、sqlite3_errcode函数 八、SQLite C Interface 九、sqlite3_exec函数 十、callback回调函数 十一、…

005、Nvidia Jetson Nano Developer KIT(b01)-硬件配置

之——设备监视与控制 杂谈 要做个小项目,很多外设设置记录一下。 正文 1.jtop安装 之前写的里有,jtop监视器可以很方便地查看整个设备的运行状态:基本环境配置 它提供了有关计算机硬件使用情况的详细信息。在jtop的界面中,可以显…

如何利用IP代理进行海外推广?

在当今数字化的时代,网络营销已经成为企业策略的重要组成部分。而对于进去海外市场的跨境玩家来说,海外的推广推广是重中之重。然而,在开展推广的过程中,我们常常会遇到各种挑战,如地域限制、访问速度慢等。 为了解决…

如果不用Baklib,哪一个帮助中心工具能够替代它?

在各行各业进入“留量时代”的当下,让用户获得良好的体验和留存老客户变得更为关键,这对于企业的客户服务提出了更高的要求。在使用各类互联网产品时,用户更倾向于通过自助方式寻找答案并解决问题,因此帮助中心的重要性也在不断提…

Eclipse使用配置tomcat服务:未识别的web项目

问题1:未识别的项目 解决:elispse未识别到改项目为Web项目

【LeetCode刷题-双指针】--674.最长连续递增序列

674.最长连续递增序列 class Solution {public int findLengthOfLCIS(int[] nums) {int n nums.length,i 0,j 0,res 0;while(j < n){if( j>0 && nums[j-1] > nums[j]){i j;}j;res Math.max(res,j - i);}return res;} }

Eclipse使用配置tomcat服务:五个地方配置JDK

添加Server配置jdk [这里是tomcat运行的jdk为1.7] 不影响项目本身编译的jdk1.6及系统环境的jdk1.6 &#xff1a;tomcat运行的jdk 项目JDK配置&#xff1a; &#xff1a;开发JDK &#xff1a;编译JDK &#xff1a;eclipse使用jdk

基于谐波参数空间的卷积神经网络自动三维牙齿分割

论文连接&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S1524070320300151 机构&#xff1a; a英国卡迪夫大学计算机科学与信息学院 b中国科学院大学北京 c中国科学院计算技术研究所北京 d深圳大数据研究院&#xff0c;深圳518172 代码链接&#x…

高频CSS面试题

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 BFC 块级格式上下文(block format context)是页面一块独立的渲染区域&#xff0c;具有一套独立的渲染规则 内部的…

leetcode刷题日记:121. Best Time to Buy and Sell Stock( 买卖股票的最佳时机)

题目给了我们一组数prices&#xff0c;其中prices[i]表示第i天的股票价格&#xff0c;需要我们求出买卖股票所能获得的最大收益。 我们的第一想法就是从算出每一种买卖股票的情况然后求出里面的最大值&#xff0c;这样我们就能得到最大收益是多少&#xff0c;但是这种情况过于复…

[文件读取]coldfusion 文件读取 (CVE-2010-2861)

1.1漏洞描述 漏洞编号CVE-2010-2861漏洞类型文件读取漏洞等级⭐⭐漏洞环境VULFOCUS攻击方式 描述: Adobe ColdFusion是美国Adobe公司的一款动态Web服务器产品&#xff0c;其运行的CFML&#xff08;ColdFusion Markup Language&#xff09;是针对Web应用的一种程序设计语言。 A…

VBA技术资料MF82:替换文件夹中文件名中的字符

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

基于51单片机电子钟温度计数码显示设计( proteus仿真+程序+设计报告+讲解视频)

这里写目录标题 ✅1.主要功能&#xff1a;✅讲解视频&#xff1a;✅2.仿真设计✅3. 程序代码✅4. 设计报告✅5. 设计资料内容清单&&下载链接✅[资料下载链接&#xff1a;](https://docs.qq.com/doc/DS0Nja3BaQmVtWUpZ) 基于51单片机电子钟温度检测数码显示设计( proteu…

企业为什么要做软文营销推广

数字化时代的来临使企业推广方式发生变化&#xff0c;软文营销推广成为企业推广的常用方式之一&#xff0c;今天媒介盒子就来和大家聊聊&#xff0c;为什么企业需要做软文营销推广。 一、 第三视角传播品牌&#xff0c;提升受众接受度 传统广告的叙事方式是企业站出来&#x…

μC/OS-II---Task管理2(os_task.c)

目录 改变Task优先级Task挂起Task恢复Task信息获取Task调度器上锁&#xff08;os_core.c&#xff09;Task调度器开锁&#xff08;os_core.c&#xff09; 改变Task优先级 #if OS_TASK_CHANGE_PRIO_EN > 0u INT8U OSTaskChangePrio (INT8U oldprio,INT8U newprio) { #if (…

Hazelcast系列(九):Map(一)加载和存储

系列文章 Hazelcast系列(一)&#xff1a;初识hazelcast Hazelcast系列(二)&#xff1a;hazelcast集成&#xff08;嵌入式&#xff09; Hazelcast系列(三)&#xff1a;hazelcast集成&#xff08;服务器/客户端&#xff09; Hazelcast系列(四)&#xff1a;hazelcast管理中心 …

3. 【自动驾驶和机器人中的SLAM技术】实现基于预积分和图优化的GNSS+IMU+Odom的融合定位系统

目录 1. 公式推导2. GNSSIMUOdom融合定位3. 利用数值求导工具&#xff0c;验证本书实验中的雅可比矩阵的正确性4. 也欢迎大家来我公众号读书--“过千帆” 1. 公式推导 2. GNSSIMUOdom融合定位 程序实现以及运行效果&#xff1a; ①首先是在预积分程序中记录了预积分积累的IMU数…

竞赛 题目:基于python的验证码识别 - 机器视觉 验证码识别

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于pyt…

超详细!必看!!STM32--时钟树原理

一、什么是时钟&#xff1f; 时钟是单片机的脉搏&#xff0c;是系统工作的同步节拍。单片机上至CPU&#xff0c;下至总线外设&#xff0c;它们工作时序的配合&#xff0c;都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。 二、什么是时钟树&#xff1f; S…