提前编译:AOT

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.mfbz.cn/a/144775.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【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;} }

工地环境监测系统,支持接入政府环保平台,扬尘噪声实时在线监测数据、联动自动控制、超标报警、数据分析等功能

智慧工地云平台源码 智慧工地系统全套源码 环境监测系统源码 随着我国城市的发展&#xff0c;对住宅等的建设要求不断提高&#xff0c;为了满足人民的需要&#xff0c;不断进行规划、建设&#xff0c;但与此同时由于施工、运输、设备、建筑材料、施工设备等因素的影响&#xff…

Vue向pdf文件中添加二维码

&#x1f680; 场景一&#xff1a;利用vue向pdf文件中写入二维码图片或其他图片 &#x1f680; 场景二&#xff1a;向pdf中添加水印 思路&#xff1a; 1、先通过url链接生成二维码&#xff0c;二维码存在于dom中 2、使用html2canvas库将二维码的dom转为一个canvas对象 3、根据c…

静态黑洞路由是什么作用,如何配置?

环境&#xff1a; 华三交换机 问题描述&#xff1a; 静态黑洞路由是什么作用&#xff0c;如何配置&#xff1f; 解决方案&#xff1a; 静态黑洞路由&#xff08;Static Blackhole Route&#xff09;是一种网络路由配置技术&#xff0c;用于将特定目的地的流量引导到一个黑洞…

【华为云IaaS基础三件套之----计算ECS、网络EIP、存储EVS】

MD[华为云IaaS基础三件套----计算、网络、存储] 华为云IaaS基础三件套之----计算ECS、网络EIP、存储EVS 说明: 这里只是简单从计算/网络/存储&#xff0c;进行介绍&#xff0c;阐明云上对于云下的优势&#xff1b;因ECS是三者综合&#xff0c;故最后说明。 1.网络----弹性公…

git分支管理以及不同git工作流对比

0、 单人开发场景 单人开发可能会出现的场景之一 如果多人协同开发我们则需要使用更加专业的工具Git&#xff08;分布式版本控制&#xff09; 1、多人协同工作使用git会出现什么问题? 代码冲突&#xff1a; 问题&#xff1a; 当多个开发者同时修改同一文件或同一行代码时…

深度学习之基于YoloV5的目标检测和双目测距系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 双目测距系统利用两个相机的图像来计算目标到相机的距离。通过对左右相机图像进行立体匹配&#xff0c;可以获得目标…

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

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

excel用RAND函数生成一个大于0小于1的随机数

插入-》函数&#xff1a; 选择RAND函数&#xff1a; 点击“继续”&#xff1a; 点击“确定”&#xff0c;就生成随机数了&#xff1a;

这个双11,谁赚了?

双11落幕&#xff0c;很多品牌迎来一年中最重要的一次生意爆发&#xff0c;但作为普通消费者&#xff0c;还是能感受到今年双11的消费氛围减弱了&#xff0c;一方面&#xff0c;电商大促驱向常态化&#xff0c;双11不一定是全年最低价&#xff0c;“有需要再买”的心态越来越多…

Domino为外出Internet邮件设置DKIM签名

大家好&#xff0c;才是真的好。 如果你看了上篇《Domino中和邮件安全有关的SPF、DKIM介绍》内容&#xff0c;想必就对DKIM概念不陌生&#xff0c;当然&#xff0c;上篇我们讲的是邮件入站的SFP、DKIM签名检查&#xff0c;这篇讲述的是外出邮件的DKIM签名。 是的&#xff0c;…

【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象

process对象是一个全局对象&#xff0c;提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。 1.进程事件 process对象是EventEmitter类的实例&#xff0c;因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的process对象事件&…

抖音直播 **** 匿名采集

2023年11月14日&#xff0c;弹幕消息为纯协议&#xff0c;可采集匿名直播间&#xff0c;可以采集发言&#xff0c;礼物&#xff0c;点赞&#xff0c;关注等匿名信息&#xff0c;不漏消息&#xff0c;所有消息均可采集 抖音直播***匿名采集2023-11-14 演示效果仅演示了发言类型的…

java入门,从CK到一部分数据到mysql

一、需求 需要从生产环境ck数据库导数据到mysql&#xff0c;数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库&#xff0c;第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份&#xff0c;或者将需要导出的数据建一张新的表了…

Vscode编辑器保存时一直提示正在保存“index.vue”: 正在从“‘Vetur‘, ‘ESLint‘”获取代码操作

问题描述&#xff1a; Vscode在使用了Vetur, ESLint两个扩展配置了vue文件语法检查&#xff0c;保存时自动fix&#xff0c;经常会出现卡死&#xff0c;通知内容如下&#xff1a; 正在保存“index.vue”: 正在从“Vetur, ESLint”获取代码操作&#xff1b; 解决办法&#xff1a…

【MongoDB】索引 – 通配符索引

一、准备工作 这里准备一些数据 db.books.drop();db.books.insert({_id: 1, name: "Java", alias: "java 入门", description: "入门图书" }); db.books.insert({_id: 2, name: "C", alias: "c", description: "C 入…

APUS与深圳大学大数据国家工程实验室联合训练开源中文大模型

日前&#xff0c;APUS与深圳大学大数据系统计算技术国家工程实验室&#xff08;以下简称“国家工程实验室”&#xff09;达成战略合作。双方集成各自优势联合开发、开源高性能中文多模态大模型Linly-Chinese-LLaMA-2-70B。该模型将更加适配中文服务场景&#xff0c;计划于2024年…

软文推广怎么做才能起效?媒介盒子为你解答

随着软文推广的逐渐&#xff0c;越来越多的企业开始注重如何推广才能起效&#xff0c;软文作为一种柔性的广告方式能够自然融入用户使用场景中&#xff0c;提高广告的曝光率和转化率&#xff0c;然后软文推广并不是保证软文质量就能起效&#xff0c;还需要经过别的步骤&#xf…

Nacos 身份认证绕过漏洞(已修复)

Nacos存在权限绕过漏洞&#xff0c;攻击者利用该漏洞可以未授权访问用户列表&#xff08;我的Nacos版本为1.2.1&#xff09; 漏洞复现&#xff1a;http://127.0.0.1:8849/nacos/v1/auth/users?pageNo1&pageSize9 利用漏洞复现问题http://127.0.0.1:8849/nacos/v1/auth/us…

Vue3源码reactive和readonly对象嵌套转换,及实现shallowReadonly

前言 官方文档中对reactive的描述&#xff1a; 响应式转换是“深层”的&#xff1a;它会影响到所有嵌套的属性。一个响应式对象也将深层地解包任何 ref 属性&#xff0c;同时保持响应性。 官方文档中对readonly的描述: 只读代理是深层的&#xff1a;对任何嵌套属性的访问都将是…
最新文章