欢迎大家来到IT世界,在知识的湖畔探索吧!
1、GraalVM介绍
1.1、什么是GraalVM
GraalVM是一个高性能的JDK(Java Development Kit)。
1.加速用Java和其他JVM语言编写的应用程序的执行。
- 在 HotSpot JVM 上使用 Graal 作为即时编译器(JIT)优化热点代码,加速运行效率。
- 作为提前 编译(Ahead-of-Time) 的本机可执行文件,加速运行效率。
2.为JavaScript,Python和许多其他流行语言提供运行环境。
- GraalVM 的多语言功能可以在单个应用程序中混合多种编程语言,轻松实现各个语言之间相互调用,比如 java调用js/python库方法。
欢迎大家来到IT世界,在知识的湖畔探索吧!
1.2、特征
高性能,云原生,通晓多语言(Polyglot)。
- 高性能,主要体现在启动高,省内存
- 云原生,想达到的效果是部署java项目时,不用先安装jdk,直接在目标机器运行,就像在windows双击运行exe文件一样。
- 通晓多语言,除了运行基于Java和JVM的语言之外,GraalVM的语言实现框架(Truffle)还可以在JVM上运行JavaScript,Ruby,Python和许多其他流行语言。 使用GraalVM Truffle,Java和其他支持的语言可以直接相互操作,并在同一内存空间中来回传递数据。
1.3、工作原理
先回顾一下HotSpot工作原理
启动慢的原因就在于,加载和编译比较慢,class越多记载/编译就越慢,启动就慢。对于启动速度要求比较高的生产环境就不是很友好,比如云原生中的容器。试想,docker容器已经秒起了,但是里面跑一个jar非常慢,这你受得了吗?(在没有graalvm之前我受得了,在graalvm之后我也受得了。)。
1.替代C2,具有更强的优化功能
2.提前编译(AOT),将运行时的编译提前到了编译时,大大减少启动时间
3.多语言的运行环境,可以为多语言提供统一的运行环境,让各个语言相互调用超级简单。
2、安装GraalVM
2.1、下载GraalVM
此次演示版本:
JDK:17
GraalVM:CE 22.3.0
根据jdk版本/操作系统下载对应版本
2.2、安装GraalVM
只需要将环境变量指向GraalVM根目录即可
java -version测试
3.3、安装native-image
gu install native-image欢迎大家来到IT世界,在知识的湖畔探索吧!
还可以下载到本地安装。
欢迎大家来到IT世界,在知识的湖畔探索吧!gu install -L native-image-installable-svm-java17-windows-amd64-22.3.0.jar测试
gu list
有native-image即可
3.4、安装 C++环境
下载Microsoft C++ 生成工具 – Visual Studio
注意:安装时选择到非C盘,其他盘,其他盘,其他盘,非常占空间。
单个组件中搜索MSVC,将141相关全部选中(对,全部,免得夜场梦多)
等吧(建议深夜安装,去吧,睡一觉,美美的睡一觉)。
结束。
添加Path环境变量
欢迎大家来到IT世界,在知识的湖畔探索吧!C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.34.31933\bin\Hostx64\x64
新建环境变量 INCLUDE
C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\shared;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.34.31933\include
新建环境变量 LIB
欢迎大家来到IT世界,在知识的湖畔探索吧!C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.34.31933\lib\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.20348.0\ucrt\x64
3、创建Spring boot 项目
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.coachtam</groupId> <artifactId>springboot3-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot3-demo</name> <description>Spring Boot3 + GraalJVM</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!--Springboot3 正式版不需要单独native插件--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <buildpacks> <buildpack>gcr.io/paketo-buildpacks/graalvm</buildpack> <buildpack>gcr.io/paketo-buildpacks/java-native-image</buildpack> </buildpacks> </image> </configuration> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>
启动器
欢迎大家来到IT世界,在知识的湖畔探索吧!package com.coachtam.springboot3demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Springboot3DemoApplication { public static void main(String[] args) { SpringApplication.run(Springboot3DemoApplication.class, args); } }
测试controller
@RestController public class HelloWorldController { @GetMapping("/demo") public String helloworld() { System.out.println("hello world"); return "hello world"; } }
4、编译Spring boot项目
欢迎大家来到IT世界,在知识的湖畔探索吧!mvn -Pnative native:compile
编译成功后,在target目录中会出现xxx.exe文件
双击exe文件运行即可
可以看得出,属于毫秒起。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/102652.html