当前位置:首页 > 科技  > 软件

Graalvm 替代 JVM 真的可以带来巨大的性能优势吗?

来源: 责编: 时间:2023-12-25 17:29:27 348观看
导读介绍Spring Boot有助于轻松开发独立的、可用于生产的 Spring 应用程序。它对 Spring 平台和第三方库采用固执己见的方法:以最少的配置简化设置过程。优势:易于使用:Spring Boot 简化了独立 Spring 应用程序的创建,无需复

介绍

Spring Boot有助于轻松开发独立的、可用于生产的 Spring 应用程序。它对 Spring 平台和第三方库采用固执己见的方法:以最少的配置简化设置过程。优势:k5A28资讯网——每日最新资讯28at.com

  • 易于使用:Spring Boot 简化了独立 Spring 应用程序的创建,无需复杂的配置。
  • 嵌入式服务器:它允许直接嵌入 Tomcat、Jetty 或 Undertow 等服务器,从而无需单独部署 WAR 文件。
  • Starter 依赖项:Spring Boot 提供预配置的“starter”依赖项,降低了构建配置的复杂性。
  • 自动配置:Spring Boot 自动配置 Spring 和第三方库,最大限度地减少手动设置工作。
  • 生产就绪功能:它提供生产就绪功能,例如指标、运行状况检查和外部化配置,确保应用程序稳健且可扩展。
  • 无需代码生成或 XML 配置:Spring Boot 运行时无需生成任何代码,无需 XML 配置文件,从而提高了开发效率。

在常见的部署中,用 Java 编写的 Spring Boot 应用程序被编译成默认在 Java 虚拟机 (JVM) 中运行的字节码。还有另一种鲜为人知的运行 Java 应用程序的方式:Native applicationk5A28资讯网——每日最新资讯28at.com

GraalVM通过提前将 Java 应用程序编译成紧凑的独立二进制文件,彻底改变了 Java 应用程序。这些二进制文件展现出明显的优势,启动速度比传统 Java 应用程序快近 100 倍。它们无需预热即可提供峰值性能,同时与 Java 虚拟机 (JVM) 同类产品相比,消耗的内存和 CPU 资源显着减少。k5A28资讯网——每日最新资讯28at.com

GraalVM 并不局限于理论创新领域;它受到 Spring Boot、Micronaut、Helidon 和 Quarkus 等主要微服务框架的支持。此外,Oracle Cloud Infrastructure、Amazon Web Services、Google Cloud Platform 和 Microsoft Azure 等领先的云平台完全支持 GraalVM 集成。k5A28资讯网——每日最新资讯28at.com

通过利用配置文件引导的优化和先进的 G1(垃圾优先)垃圾收集器,GraalVM 使我们的应用程序具有更低的延迟。事实上,它提供的性能指标与在 Java 虚拟机 (JVM) 上运行的应用程序的性能指标相当或更强。这种速度、效率和安全性的卓越结合使 GraalVM 成为现代 Java 开发的改变游戏规则的选择。k5A28资讯网——每日最新资讯28at.com

过去,有很多使用 GraalVM 对 Java 应用程序进行基准测试的请求,期望 GraalVM 能够超越传统的 Java 虚拟机 (JVM)。k5A28资讯网——每日最新资讯28at.com

在本篇文章中,我们将对各种 Java 应用程序的性能进行比较分析,评估它们在 JVM 和 GraalVM 环境中的执行情况。k5A28资讯网——每日最新资讯28at.com

我们将通过在 JVM(Java 虚拟机)和 GraalVM 上执行基本的“hello world”应用程序进行比较分析。通过这个比较,我们旨在探索 GraalVM 相对于传统 JVM 的优越性能。k5A28资讯网——每日最新资讯28at.com

测试设置

所有测试均在具有 16G RAM 的 MacBook M1 上执行。软件版本有:k5A28资讯网——每日最新资讯28at.com

  • JDK 21
  • Graalvm JDK 21
  • SpringBoot 3.1.4

应用程序代码是一个包含单个路由的简单文件:k5A28资讯网——每日最新资讯28at.com

package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.http.ResponseEntity;import org.springframework.http.HttpStatus;import org.springframework.web.bind.annotation.RestController;@SpringBootApplication@RestControllerpublic class DemoApplication {    public static void main(String[] args) {        SpringApplication.run(DemoApplication.class, args);    }    @GetMapping("/")    public String handleRequest() {        return "Hello World!";    }}

为了构建原生镜像,我们使用了 MVN 的原生插件:k5A28资讯网——每日最新资讯28at.com

<?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.1.4</version>  <relativePath/>  <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties>  <java.version>21</java.version> </properties> <dependencies>  <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>   <plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-maven-plugin</artifactId>    <configuration>     <mainClass>com.example.demo.DemoApplication</mainClass>     <layout>JAR</layout>    </configuration>   </plugin>   <plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-shade-plugin</artifactId>    <version>3.5.0</version>    <executions>     <execution>      <phase>package</phase>      <goals>       <goal>shade</goal>      </goals>     </execution>    </executions>   </plugin>  </plugins> </build> <profiles>  <profile>   <id>native</id>   <build>    <plugins>     <plugin>      <groupId>org.graalvm.buildtools</groupId>      <artifactId>native-maven-plugin</artifactId>      <version>0.9.27</version>      <extensions>true</extensions>      <executions>       <execution>        <id>build-native</id>        <goals>         <goal>compile-no-fork</goal>        </goals>        <phase>package</phase>       </execution>       <execution>        <id>test-native</id>        <goals>         <goal>test</goal>        </goals>        <phase>test</phase>       </execution>      </executions>      <configuration>       <!-- ... -->      </configuration>     </plugin>    </plugins>   </build>  </profile> </profiles></project>

原生二进制大小约为76M:k5A28资讯网——每日最新资讯28at.com

76M /Users/mayankc/Work/source/perfComparisons/java/springboot/target/demo

结果

每个包含500万个请求的测试分别针对50、100和300个并发连接执行。对于负载测试,我们使用了 Bombardier 测试工具。k5A28资讯网——每日最新资讯28at.com

以下是表格形式的测试结果:k5A28资讯网——每日最新资讯28at.com

k5A28资讯网——每日最新资讯28at.com

k5A28资讯网——每日最新资讯28at.com

k5A28资讯网——每日最新资讯28at.com

统计

为了更直观的展示测试结果,我们使用以下公式从结果中生成记分卡。对于每一个测量,结果获胜的按照领先度得分:k5A28资讯网——每日最新资讯28at.com

  • <5%,不给分
  • 5%到20%之间,获胜者得1分
  • 20%到50%之间,获胜者得2分
  • >50%,获胜者得3分

以下是评分结果:k5A28资讯网——每日最新资讯28at.com

k5A28资讯网——每日最新资讯28at.com

结论

选择一个简单的 hello world 案例可能不是真正释放 GraalVM 或本机代码编译潜力的最合适场景。本地运行的相同 SpringBoot 应用程序的性能并没有明显优于其 JVM 对应项。GraalVM 唯一显着的优势在于其对内存的高效利用。k5A28资讯网——每日最新资讯28at.com

本文仅从性能方面对 GraalVM 和 传统 JVM 做了比较,参考以上测试结果,如果我们想要优化程序启动速度和对内存的利用率方面,GraalVM 会是更好的选择,至于其他性能指标,优势并不明显!k5A28资讯网——每日最新资讯28at.com

随着 GraalVM 在国内的推广和应用越来越广泛,相信它将会在未来的软件开发领域发挥越来越重要的作用,我们期待它之后的表现!k5A28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-54021-0.htmlGraalvm 替代 JVM 真的可以带来巨大的性能优势吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python Selenium实现自动化测试及Chrome驱动使用!

下一篇: 基于Go-Kit的Golang整洁架构实践

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz&ldquo;难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?&rdquo;这一番话,出自百合网联合创
  • 消费结构调整丨巨头低价博弈,拼多多还卷得动吗?

    来源:征探财经作者:陈香羽随着流量红利的退潮,电商的存量博弈越来越明显。曾经主攻中高端与品质的淘宝天猫、京东重拾&ldquo;低价&rdquo;口号。而过去与他们错位竞争的拼多多,靠
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
Top