一文读懂GraalVM的作用(gradle的作用是什么?)

一文读懂GraalVM的作用(gradle的作用是什么?)

精选文章moguli202025-05-08 14:34:1910A+A-

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库方法。

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

还可以下载到本地安装。

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环境变量

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

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>

启动器

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项目

mvn -Pnative native:compile

编译成功后,在target目录中会出现xxx.exe文件

双击exe文件运行即可

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

点击这里复制本文地址 以上内容由莫古技术网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

莫古技术网 © All Rights Reserved.  滇ICP备2024046894号-2