祥云平台英文网站网站建设吉金手指专业12

当前位置: 首页 > news >正文

祥云平台英文网站,网站建设吉金手指专业12,重庆网站建设有佳网络,免费主机空间提前编译#xff1a;AOT AOT概述 JIT与AOT的区别 JIT和AOT 这个名词是指两种不同的编译方式#xff0c;这两种编译方式的主要区别在于是否在“运行时”进行编译 #xff08;1#xff09;JIT#xff0c; Just-in-time,动态(即时)编译#xff0c;边运行边编译#xff1…提前编译AOT AOT概述 JIT与AOT的区别 JIT和AOT 这个名词是指两种不同的编译方式这两种编译方式的主要区别在于是否在“运行时”进行编译 1JIT Just-in-time,动态(即时)编译边运行边编译 在程序运行时根据算法计算出热点代码然后进行 JIT 实时编译这种方式吞吐量高有运行时性能加成可以跑得更快并可以做到动态生成代码等但是相对启动速度较慢并需要一定时间和调用频率才能触发 JIT 的分层机制。JIT 缺点就是编译需要占用运行时资源会导致进程卡顿。 2AOTAhead Of Time指运行前编译预先编译。 AOT 编译能直接将源代码转化为机器码内存占用低启动速度快可以无需 runtime 运行直接将 runtime 静态链接至最终的程序中但是无运行时性能加成不能根据程序运行情况做进一步的优化AOT 缺点就是在程序运行前编译会使程序安装的时间增加。 简单来讲JIT即时编译指的是在程序的运行过程中将字节码转换为可在硬件上直接运行的机器码并部署至托管环境中的过程。而 AOT 编译指的则是在程序运行之前便将字节码转换为机器码的过程。 .java - .class - (使用jaotc编译工具) - .so程序函数库,即编译好的可以供其他程序使用的代码和数据3AOT的优点 简单来讲Java 虚拟机加载已经预编译成二进制库可以直接执行。不必等待及时编译器的预热减少 Java 应用给人带来“第一次运行慢” 的不良体验。 在程序运行前编译可以避免在运行时的编译性能消耗和内存消耗 可以在程序运行初期就达到最高性能程序启动速度快 运行产物只有机器码打包体积小 AOT的缺点 由于是静态提前编译不能根据硬件情况或程序运行情况择优选择机器指令序列理论峰值性能不如JIT 没有动态能力同一份产物不能跨平台运行 第一种即时编译 (JIT) 是默认模式Java Hotspot 虚拟机使用它在运行时将字节码转换为机器码。后者提前编译 (AOT)由新颖的 GraalVM 编译器支持并允许在构建时将字节码直接静态编译为机器码。 现在正处于云原生降本增效的时代Java 相比于 Go、Rust 等其他编程语言非常大的弊端就是启动编译和启动进程非常慢这对于根据实时计算资源弹性扩缩容的云原生技术相冲突Spring6 借助 AOT 技术在运行时内存占用低启动速度快逐渐的来满足 Java 在云原生时代的需求对于大规模使用 Java 应用的商业公司可以考虑尽早调研使用 JDK17通过云原生技术为公司实现降本增效。 Graalvm Spring6 支持的 AOT 技术这个 GraalVM 就是底层的支持Spring 也对 GraalVM 本机映像提供了一流的支持。GraalVM 是一种高性能 JDK旨在加速用 Java 和其他 JVM 语言编写的应用程序的执行同时还为 JavaScript、Python 和许多其他流行语言提供运行时。 GraalVM 提供两种运行 Java 应用程序的方法在 HotSpot JVM 上使用 Graal 即时 (JIT) 编译器或作为提前 (AOT) 编译的本机可执行文件。 GraalVM 的多语言能力使得在单个应用程序中混合多种编程语言成为可能同时消除了外语调用成本。GraalVM 向 HotSpot Java 虚拟机添加了一个用 Java 编写的高级即时 (JIT) 优化编译器。 GraalVM 具有以下特性 一种高级优化编译器它生成更快、更精简的代码需要更少的计算资源AOT 本机图像编译提前将 Java 应用程序编译为本机二进制文件立即启动无需预热即可实现最高性能Polyglot 编程在单个应用程序中利用流行语言的最佳功能和库无需额外开销高级工具在 Java 和多种语言中调试、监视、分析和优化资源消耗 总的来说对云原生的要求不算高短期内可以继续使用 2.7.X 的版本和 JDK8不过 Spring 官方已经对 Spring6 进行了正式版发布。 Native Image 目前业界除了这种在JVM中进行AOT的方案还有另外一种实现Java AOT的思路那就是直接摒弃JVM和C/C一样通过编译器直接将代码编译成机器代码然后运行。这无疑是一种直接颠覆Java语言设计的思路那就是GraalVM Native Image。它通过C语言实现了一个超微缩的运行时组件 —— Substrate VM基本实现了JVM的各种特性但足够轻量、可以被轻松内嵌这就让Java语言和工程摆脱JVM的限制能够真正意义上实现和C/C一样的AOT编译。这一方案在经过长时间的优化和积累后已经拥有非常不错的效果基本上成为Oracle官方首推的Java AOT解决方案。 Native Image 是一项创新技术可将 Java 代码编译成独立的本机可执行文件或本机共享库。在构建本机可执行文件期间处理的 Java 字节码包括所有应用程序类、依赖项、第三方依赖库和任何所需的 JDK 类。生成的自包含本机可执行文件特定于不需要 JVM 的每个单独的操作系统和机器体系结构。 演示Native Image构建过程 GraalVM安装 1下载GraalVM 进入官网下载Download GraalVM GraalVM is an advanced JDK with ahead-of-time Native Image compilation.https://www.graalvm.org/downloads/ 2配置环境变量 添加GRAALVM_HOME 把JAVA_HOME修改为graalvm的位置 把Path修改位graalvm的bin位置 使用命令查看是否安装成功 3安装native-image插件 使用命令 gu install native-image下载安装 安装C的编译环境 1下载Visual Studio安装软件 下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux免费下载 Visual Studio IDE 或 VS Code。 在 Windows、Mac 上试用 Visual Studio Professional 或企业版。https://visualstudio.microsoft.com/zh-hans/downloads/ 2安装Visual Studio 3添加Visual Studio环境变量 配置INCLUDE、LIB和Path 4打开工具在工具中操作 编写代码构建Native Image 1编写Java代码 public class Hello {public static void main(String[] args) {System.out.println(hello world);} } 2复制文件到目录执行编译 3Native Image 进行构建 4查看构建的文件 5执行构建的文件 可以看到这个Hello最终打包产出的二进制文件大小为11M这是包含了SVM和JDK各种库后的大小虽然相比C/C的二进制文件来说体积偏大但是对比完整JVM来说可以说是已经是非常小了。 相比于使用JVM运行Native Image的速度要快上不少cpu占用也更低一些从官方提供的各类实验数据也可以看出Native Image对于启动速度和内存占用带来的提升是非常显著的