Graalvm尝鲜使用

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

(注:目前Graalvm打包问题相对较多,学习为主,不要用于生产)

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,执行成功

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

回答: Svelte是一个新兴的前端框架,近年来逐渐崭露头角。虽然它的star数量还远远不及Vue、React和Angular这三个主流框架,但是其增长速度令人瞩目。Svelte提供了一种全新的思维方式,通过编译时将组件转化为高效的JavaScript代码,使得应用程序在运行时更加高效。与传统的前端框架相比,Svelte的体积更小、性能更好。由于Svelte的出现,前端开发者可以尝试新的技术栈,提升开发效率和用户体验。因此,对于前端工程师来说,了解和学习Svelte是值得考虑的。123 #### 引用[.reference_title] - *1* [尝鲜 Svelte 前端框架,开发读书笔记](https://blog.csdn.net/csdnnews/article/details/109912904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [实战 | 尝鲜 Svelte 前端框架,开发读书笔记](https://blog.csdn.net/azl397985856/article/details/110412562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *3* [undefined](undefined)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值