Graalvm尝鲜使用

news2024/11/18 17:02:27

面试时遇到大佬提点了下在性能不足的机器上传统优化JVM调优已经作用不大的背景下,采用graalvm进行打包成二进制文件,脱离java虚拟机,性能提升20%到100%,因此实操记录下来,方便后续使用

1、前置预装

graalvm-ce-java17-windows-amd64-22.3.3.zip

native-image-installable-svm-java17-windows-amd64-22.3.3.jar(必须和graalvm版本一致,22.3.3)

下载地址:Release GraalVM Community Edition 22.3.3 · graalvm/graalvm-ce-builds · GitHub

Visual Studio Community 2022

下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux (microsoft.com)

maven3.9.7(maven版本过低可能会不兼容提示报错,自行maven官方下载配置即可)

(1)graalvm-ce-java17-windows-amd64-22.3.3.zip解压到一个目录下

和安装java一样进行环境变量配置

cmd执行java -vesion查看是否配置好

(2)安装native-image

在下载好的native-image-installable-svm-java17-windows-amd64-22.3.3.jar目录下,cmd执行

gu install -L native-image-installable-svm-java17-windows-amd64-22.3.3.jar

(3)安装Visual Studio Community 2022

勾选使用C++的桌面开发及window 11 sdk

勾选英语(中文可能会有问题),安装位置默认即可,无需修改(怕有问题)

配置Visual Studio的环境变量

MSVC

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807

注意:在你的电脑上安装的Visual Studio目录14.40.33807不一定是这个值,可以直接打开C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\查看

进行配置:

下面都一样,需要自行查看目录

WK10_BIN

C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0

WK10_INCLUDE

C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0

WK10_LIB

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0

INCLUDE

%WK10_INCLUDE%\ucrt;%WK10_INCLUDE%\um;%WK10_INCLUDE%\shared;%MSVC%\include;

LIB

%WK10_LIB%\um\x64;%WK10_LIB%\ucrt\x64;%MSVC%\lib\x64;

Path下新增

%MSVC%\bin\HostX64\x64

%WK10_BIN%\x64

cmd执行cl查看是否配置好

2、试运行创建单体demo生成exe直接执行

(1)创建一个springboot3.0项目,pom中加入如下插件

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <finalName>${project.build.finalName}</finalName>
                    <archive>
                        <manifest>
                            <mainClass>${start-class}</mainClass>
                        </manifest>
                    </archive>
                    <!-- 表示使用assembly预制的描述符jar-with-dependencies创建包含项目依赖的程序集二进制文件。 -->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
                <!--配置将创建程序集绑定到了package阶段。则在执行mvn package后,会在target目录下生成类似的文件:
                   XXX-1.0-SNAPSHOT-jar-with-dependencies.jar,在版本和后缀之间的jar-with-dependencies为用于创建程序集的描述符的id,
                   即自定义的assembly描述符文件中配置的id。如果不想在文件或目录后追加此id,可以在配置中将appendAssemblyId设置为false-->
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <version>${native.maven.plugin.version}</version>
                <configuration>
                    <skip>false</skip>
                    <!-- 使用参数文件进行原生映像构建 -->
                    <useArgFile>false</useArgFile>
                    <!-- 指定镜像名称 如果未提供自定义映像名称,则默认使用项目的工件 ID。-->
                    <imageName>${project.artifactId}</imageName>
                    <!-- 指定主类 -->
                    <mainClass>${start-class}</mainClass>
                    <!-- 其他参数传递给本机映像生成器 -->
                    <buildArgs>
                        --no-fallback
                        -H:-CheckToolchain
                    </buildArgs>
                    <!-- GraalVM 可达性元数据支持 -->
                    <metadataRepository>
                        <enabled>true</enabled>
                    </metadataRepository>
                    <!--
                    <agent>
                        <enabled>true</enabled>
                    </agent>
                    -->
                    <!--使用快速构建模式构建映像 -->
                    <!-- <quickBuild>true</quickBuild>-->
                </configuration>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <goals>
                            <!-- “native:build”目标已弃用。请改用 'native:compile-no-fork'。 -->
                            <goal>compile-no-fork</goal>
                        </goals>
                        <phase>package</phase>
                    </execution>
                </executions>
            </plugin>
    <properties>
        <java.version>17</java.version>
        <native.maven.plugin.version>0.10.1</native.maven.plugin.version>
        <start-class>com.example.demo.DemoApplication</start-class>
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
    </properties>

start-class:指向启动类

(2)生成exe文件

我们在搜索栏中输入x64 native tools找到并打开

cd到项目目录下

执行命令

mvn -Pnative native:compile

经过一段时间,执行完成

此时,我们打开target目录,可以找到生成的exe文件

然后执行exe,执行成功

注:期间可能会遇到很多问题,和人生一样,跌宕起伏。自行百度解决,相信很快就能执行成功

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

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

相关文章

qt开发-12_QScrollArea

在 Qt 中&#xff0c;QScrollArea 是用于显示可以滚动内容的控件&#xff0c;通常用于处理视图中内容超出可见区域的情况。它提供了一种在有限的视窗内显示大量内容的解决方案&#xff0c;如显示大图像、长文本、多个小部件等。 常用方法和属性 setWidget(QWidget *widget)&am…

android在线阅读代码网站

android在线阅读代码社区&#xff1a; Android 1.6 到 Android 10 的源码&#xff1a; Android OS 在线源代码 - https://www.androidos.net.cn10.0.0_r6 - Android社区 - https://www.androidos.net.cn/ AndroidXRef https://cs.android.com/ https://cs.android.com/android…

容器之视角构件的演示

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_ne…

Shopline电商平台的对接流程

对接Shopline平台需要具备一定的技术能力&#xff0c;包括API开发经验、编程技能以及对电商平台运作的理解。此外&#xff0c;与Shopline平台的技术支持团队保持沟通&#xff0c;可以在遇到问题时获得帮助。对接Shopline平台的流程通常涉及以下关键步骤。 1.了解Shopline API文…

详解大模型是如何理解并使用 tools ?

前文 大家肯定对使用大模型的函数回调或者说 Tools 已经耳熟能详了&#xff0c;那么他们具体内部是如何运作的呢&#xff0c;本文就此事会详细给大家介绍具体的细节。 tools 首先是大家最熟悉的环节&#xff0c;定义两个 tool 的具体实现&#xff0c;其实就是两个函数&#…

WSL+Anconda(pytorch深度学习)环境配置

动机 最近在读point cloud相关论文&#xff0c;准备拉github上相应的code跑一下&#xff0c;但是之前没有深度学习的经验&#xff0c;在配置环境方面踩了超级多的坑&#xff0c;依次来记录一下。 一开始我直接将code拉到了windows本地来运行&#xff0c;遇到了数不清的问题&a…

数据分析:置换检验Permutation Test

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 置换检验是一种非参数统计方法&#xff0c;它不依赖于数据的分布形态&#xff0c;因此特别适…

99.9% 超高控制精度!混合量子芯片具备大规模生产潜力

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨沛贤/浪味仙 排版丨沛贤 深度好文&#xff1a;700字丨5分钟阅读 摘要&#xff1a;悉尼量子初创公司 Diraq 正与一个欧洲研发联盟展开合作&#xff0c;通过将量子比特与传统晶体管结合&…

新能源汽车 LabCar 测试系统方案(二)

什么是LabCar测试 LabCar测试目标是进行整车黄板台架功能测试&#xff0c;用于整车开发和测试阶段&#xff0c;满足设计人员和测试人员的试验需求&#xff0c;以验证整车性能&#xff0c;减少开发工作量。系统主要用于测试静态及动态工况下的纯电动汽车的各项功能实现情况。 …

股票分析学习

库&#xff1a; pandas to_datetime:它可以处理各种格式的日期和时间数据&#xff0c;并将其统一转换为 Pandas 可以理解和操作的内部日期时间格式。 matplotlib.pyplot 用户可以轻松地创建各种静态、动态、交互式和 3D 图形。 1. 绘制线图&#xff08;plot()&#xff09; …

eVTOL飞机:技术挑战、应用机遇和运动的作用

最近&#xff0c;航空业的嗡嗡声围绕着电动空中出租车、空中拼车、无人驾驶航空货物运送等。这些概念都依赖于一类称为eVTOL的飞机&#xff0c;eVTOL是电动垂直起降的缩写。 与直升机类似&#xff0c;但没有噪音和排放&#xff0c;eVTOL可以在不需要简易机场的情况下飞行、悬停…

Python | Leetcode Python题解之第171题Excel列表序号

题目&#xff1a; 题解&#xff1a; class Solution:def titleToNumber(self, columnTitle: str) -> int:number, multiple 0, 1for i in range(len(columnTitle) - 1, -1, -1):k ord(columnTitle[i]) - ord("A") 1number k * multiplemultiple * 26return n…

北京智慧养老平台app打造,智慧养老,安心享老

目前&#xff0c;我国60岁以上老年人占人口比重已超过21%&#xff0c;我国老年人口数量快速增长&#xff0c;人口老龄化程度不断加深。与此同时&#xff0c;老年人的养老需求也在逐步上升。除了日常吃穿等生活需求外&#xff0c;他们在健康、精神方面也提出来新的要求。为了满足…

Linux操作系统汇编语言基础知识(图文代码)

1、什么是汇编语言&#xff0c;它在计算机语言中的地位&#xff1f; 汇编语言是程序设计语言的基础语言&#xff0c;是唯一可以直接与计算机硬件打交道的语言2、汇编语言与源程序、汇编程序、汇编的关系&#xff1f; 3、汇编语言的特点 \1) 汇编语言与机器指令一一对应&#…

头歌——机器学习——集成学习案例

第1关&#xff1a;基于集成学习模型的应用案例 任务描述 本次任务我们将会使用银行营销数据集&#xff08;来源于UCI数据集&#xff1a;UCI Machine Learning Repository &#xff09;,该数据集共45211条数据&#xff0c;涉及葡萄牙银行机构的营销活动&#xff0c;通过一些与…

人工智能机器学习算法总结偏差和方差

1.定义 在机器学习中&#xff0c;偏差&#xff08;Bias&#xff09;和方差&#xff08;Variance&#xff09;是评估模型泛化能力的重要概念。它们描述了模型在训练数据上的表现以及对新数据的适应能力。 偏差&#xff08;Bias&#xff09; &#xff1a; 偏差是指模型的预测值与…

Redis之短信登录

文章目录 基于 Session 实现发送验证码登录校验验证码登录拦截器注册拦截器 基于 Redis 实现发送验证码登录校验登录拦截器登录拦截器优化 基于 Session 实现 发送验证码 /*** 发送手机验证码*/ PostMapping("code") public Result sendCode(RequestParam("pho…

BUCK电路布线规则、EMI分析

电源系列文章目录 本系列文章为博主在学习工作过程中的心得记录&#xff0c;欢迎评论区交流讨论。 BUCK电路工作原理、参数计算及工作模式分析BUCK电路布线规则、EMI分析电源电路中肖特基、续流二极管要求 目录 电源系列文章目录一、PCB布线规则1、输入电感与肖特基摆放2、输…

Avalonia 常用控件二 Menu相关

1、Menu 添加代码如下 <Button HorizontalAlignment"Center" Content"Menu/菜单"><Button.Flyout><MenuFlyout><MenuItem Header"打开"/><MenuItem Header"-"/><MenuItem Header"关闭"/&…

降重工具革命:如何使用AI技术优化论文原创性

论文降重一直是困扰各界毕业生的“拦路虎”&#xff0c;还不容易熬过修改的苦&#xff0c;又要迎来降重的痛。 其实想要给论文降重达标&#xff0c;我有一些独家秘诀。话不多说直接上干货&#xff01; 1、同义词改写&#xff08;针对整段整句重复&#xff09; 这是最靠谱也是…