GraalVM入门教程

news/2024/7/4 8:11:27 标签: java, spring boot, 云原生

GraalVM入门教程

  • GraalVM是什么
  • 几个名词介绍
    • native-image
    • gu
  • 基础环境搭建
    • linux
      • 下载GraalVM
      • 配置环境变量
      • 下载安装AOT编译器 native-image
      • 安装gcc、glibc-devel 与 zlib-devel
      • 下载maven并配置环境变量
    • windows
      • 下载GraalVM
      • 配置环境变量
      • 下载安装AOT编译器 native-image
      • 下载配置windows sdk和msvc
      • 下载maven并配置环境变量
  • 创建、构建、运行SpringBoot3的项目
    • windows
    • Linux
  • 传统jar包和原生镜像速度对比
    • windows
    • Linux

GraalVM是什么

GraalVM是一个高性能、云原生、支持多种语言的虚拟机。
GraalVM 提供了一个名为 “Native Image” 的工具,它能够将 Java 应用程序预编译成本机可执行文件。这种方法的优点是启动速度快,内存占用少,因为程序运行时不需要 JVM 和类加载。
然而这种方式也存在一些弊端,如预编译的 GraalVM Native Image 相比于在 HotSpot JVM 上运行的相同程序,它没有一个先进的即时编译器 (JIT) ,因此就不能在运行时分析和优化代码,无法利用这些运行时优化,因此在性能表现上可能会有所降低。

官网:https://www.graalvm.org/

几个名词介绍

native-image

native-image 是一个用于将 Java 程序编译为本地可执行文件的工具。它是 GraalVM 的一部分,GraalVM 是一个高性能的通用虚拟机,支持多种语言。它可以将 Java 应用程序预编译为本机可执行文件,这样生成的文件可以直接运行,无需 JVM 或者任何其他的运行时环境。

不同平台相关依赖不同:
image.png

gu

gu 是 GraalVM 的组件安装器 (GraalVM Updater),你可以使用 gu 来安装、列出和卸载 GraalVM 中的各种组件。

基础环境搭建

linux

环境:

  • centos7
  • jdk17
  • maven 3.6.1
  • spring-boot3.1.4

下载GraalVM

下载GraalVM for JDK 17 Community 17.0.8:
https://hub.nuaa.cf/graalvm/graalvm-ce-builds/releases/tag/jdk-17.0.8

image.png

配置环境变量

下载完传到Linux服务器,解压,配置环境变量
配置jdk环境变量请参考:https://blog.csdn.net/qq_34845394/article/details/90674658
验证:

java -version

image.png

下载安装AOT编译器 native-image

  1. 命令操作【离线方式】
gu install --file native-image-installable-svm-java17-windows-amd64-22.1.0.jar
  1. 或者在命令中直接【在线】联网按照**(推荐)**
gu install native-image

查看已经安装的 native-image 版本

native-image --version

image.png

查看已经安装的GraalVM 中的各种组件

gu list

image.png

安装gcc、glibc-devel 与 zlib-devel

MacOS 系统,请运行:

brew install gcc zlib

CentOS 系统,请运行:

yum install -y gcc glibc-devel zlib-devel

Ubuntu 系统,请运行:

sudo apt install gcc libc6-dev zlib1g-dev

下载maven并配置环境变量

请参考:https://blog.csdn.net/qq_34845394/article/details/90674933
image.png

windows

环境:

  • win11
  • jdk17
  • maven 3.6.1
  • spring-boot3.1.4
  • idea 2023.2.2

下载GraalVM

下载GraalVM for JDK 17 Community 17.0.8:
https://hub.nuaa.cf/graalvm/graalvm-ce-builds/releases/tag/jdk-17.0.8
image.png

配置环境变量

请参考:https://zhuanlan.zhihu.com/p/610486052

下载安装AOT编译器 native-image

gu.cmd install native-image

image.png

下载配置windows sdk和msvc

Microsoft Visual C++(简称Visual C++、MSVC、VS或VC)是微软公司的免费C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。
请参考:https://zhuanlan.zhihu.com/p/610486052

下载maven并配置环境变量

过于简单,自行百度
image.png

创建、构建、运行SpringBoot3的项目

项目必须是 SpringBoot 3.0 版本以上 + JDK17
这里提供一个我测试的项目,源码地址:https://gitee.com/leiguoqing/spring-boot3-demo

windows

如果你想自己创建项目流程如下:
image.png

image.png

创建好之后,pom.xml 文件和spring-boot2项目有所不同,右边的maven也有所不同
image.png
勾上 maven 上面的native,然后点击plugins里面的 native:compile进行构建,构建的速度取决于电脑的性能
image.png
image.png

也可以手动用maven命令进行构建,如下:

mvn clean -Pnative native:compile -DskipTests

image.png
image.png
此时项目的target目录会生成一个.exe的可执行文件,因为我们是在windows上面操作的,如果是Linux系统就会生成Linux系统的可执行文件
image.png
直接双击此 exe 就可以直接运行项目
image.png
可以看到启动速度飞快!!!

Linux

接下来在Linux上面操作下
将项目上传到Linux服务器:
image.png

进入spring-boot3-demo目录,然后执行下面的命令进行构建:

mvn clean -Pnative native:compile -DskipTests

image.png
image.png
image.png

构建成功后target目录下就会生成可执行文件,就可以直接运行了
image.png
image.png
速度飞快!!!

image.png

传统jar包和原生镜像速度对比

windows

image.png

Linux

image.png

不管windows还是Linux启动速度快了十几倍,甚至几十倍!!!

参考文章:

  • GraalVM在windows上的环境搭建(2023年版本)
  • GraalVM编译SpringBoot程序-CSDN博客

http://www.niftyadmin.cn/n/5108557.html

相关文章

AIO开放接口平台免费畅享ChatGPT聊天、联网互动、学术等服务!更有DALL·E 3最强AI绘图功能!

免费畅享! AIO平台ChatGPT联网、聊天、学术等服务! AIO开放接口平台 | 服务介绍 ALL IN ONE (AIO)API服务是LLM(大语言模型)开放接口平台:持续接入各种主流的大模型接口,并提供简单、易用、统一的API交互…

uniapp下载附件保存到手机(文件、图片)ios兼容

downloadFile(file),其中file为下载的文件地址uni.downloadFile图片使用uni.saveImageToPhotosAlbum【安卓、ios都合适】文件使用uni.openDocument【安卓图片也可以用这个,ios会失败】 // 下载文件 export function downloadFile(file) {let acceptArr …

[论文笔记]GPT-1

引言 今天带来论文Improving Language Understanding by Generative Pre-Training的笔记,它的中文题目为:通过生成式预训练改进语言理解。其实就是GPT的论文。 自然语言理解可以应用于大量NLP任务上,比如文本蕴含、问答、语义相似和文档分类。虽然无标签文本语料是丰富的,…

AI全栈大模型工程师(九)Function Calling 的机制

文章目录 Function Calling 的机制Function Calling 示例 1:加法计算器Function Calling 实例 2:四则混合运算计算器后记Function Calling 的机制 Function Calling 示例 1:加法计算器 需求:用户输入任意可以用加法解决的问题,都能得到计算结果。 # 加载环境变量import o…

【c++Leetcode】141. Linked List Cycle

问题入口 思想:Floyds Tortoise and Hare 这个算法简单来说就是设置一个慢指针(一次移动一个位置)和一个快指针(一次移动两个位置)。在遍历过程中,如果慢指针和快指针都指向同一个元素,证明环…

skiaSharp linux 生成验码字体显示不出来

一、拷贝windows下的字体如:C:\Windows\Fonts 设置字体的地方: var fontPath Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Fonts", "TAHOMA.TTF");最终效果:

【已解决】java的gradle项目报错org.gradle .api.plugins .MavenPlugin

我的java的gradle项目经常报错org.gradle .api.plugins .MavenPlugin。报错这个问题是因为依赖起冲突了,我在网上试了很多方法都没有效果,折让小编我很是苦恼,不过还好到最后问题还是解决了。 首先要知道你的项目所使用的gradle版本&#xf…

华为OD 最大社交距离(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…