一文读懂GraalVM的作用

一文读懂GraalVM的作用1 GraalVM 介绍 1 1 什么是 GraalVMGraal 是一个高性能的 JDK Java Development Kit 1 加速用 Java 和其他 JVM 语言编写的应用程序的执行

欢迎大家来到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库方法。
一文读懂GraalVM的作用



欢迎大家来到IT世界,在知识的湖畔探索吧!

1.2、特征

高性能,云原生,通晓多语言(Polyglot)

  • 高性能,主要体现在启动高,省内存
  • 云原生,想达到的效果是部署java项目时,不用先安装jdk,直接在目标机器运行,就像在windows双击运行exe文件一样。
  • 通晓多语言,除了运行基于Java和JVM的语言之外,GraalVM的语言实现框架(Truffle)还可以在JVM上运行JavaScript,Ruby,Python和许多其他流行语言。 使用GraalVM Truffle,Java和其他支持的语言可以直接相互操作,并在同一内存空间中来回传递数据。

1.3、工作原理

先回顾一下HotSpot工作原理

一文读懂GraalVM的作用

启动慢的原因就在于,加载和编译比较慢,class越多记载/编译就越慢,启动就慢。对于启动速度要求比较高的生产环境就不是很友好,比如云原生中的容器。试想,docker容器已经秒起了,但是里面跑一个jar非常慢,这你受得了吗?(在没有graalvm之前我受得了,在graalvm之后我也受得了。)。

1.替代C2,具有更强的优化功能

一文读懂GraalVM的作用

2.提前编译(AOT),将运行时的编译提前到了编译时,大大减少启动时间

一文读懂GraalVM的作用

3.多语言的运行环境,可以为多语言提供统一的运行环境,让各个语言相互调用超级简单。

一文读懂GraalVM的作用

2、安装GraalVM

2.1、下载GraalVM

此次演示版本:

JDK:17

GraalVM:CE 22.3.0

根据jdk版本/操作系统下载对应版本

一文读懂GraalVM的作用

2.2、安装GraalVM

只需要将环境变量指向GraalVM根目录即可

java -version测试

一文读懂GraalVM的作用

3.3、安装native-image

gu install native-image

欢迎大家来到IT世界,在知识的湖畔探索吧!

还可以下载到本地安装。

一文读懂GraalVM的作用

欢迎大家来到IT世界,在知识的湖畔探索吧!gu install -L native-image-installable-svm-java17-windows-amd64-22.3.0.jar

测试

gu list
一文读懂GraalVM的作用

有native-image即可

3.4、安装 C++环境

下载Microsoft C++ 生成工具 – Visual Studio

注意:安装时选择到非C盘,其他盘,其他盘,其他盘,非常占空间。

一文读懂GraalVM的作用

单个组件中搜索MSVC,将141相关全部选中(对,全部,免得场梦多)

一文读懂GraalVM的作用

等吧(建议深夜安装,去吧,睡一觉,美美的睡一觉)。

一文读懂GraalVM的作用

一文读懂GraalVM的作用

结束。

添加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文件运行即可

一文读懂GraalVM的作用

可以看得出,属于毫秒起。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/102652.html

(0)
上一篇 44分钟前
下一篇 31分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信