栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot 2.4新特性减少95%内存占用问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot 2.4新特性减少95%内存占用问题

节省 95%的内存占用,减少 80%的启动耗时。

GraalVM 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。最近比较火的 Java 框架 Quarkus 默认支持 GraalVM

下图为 Quarkus 和传统框架(SpringBoot) 等对比图,更快的启动速度、更小的内存消耗、更短的服务响应。

Spring Boot 2.4 开始逐步提供对 GraalVM 的支持,旨在提升上文所述的 启动、内存、响应的使用体验。

安装 GraalVM

目前官方社区版本最新为 20.3.0 ,是基于 OpenJDK 8u272 and 11.0.9 定制的,可以理解为 OpenJDK 的衍生版本

官方推荐的是 SDKMAN 用于快速安装和切换不同版本 JDK 的工具 ,类似于 nodejs 的 nvm。

使用类似命令即可完成指定版本安装和指定默认版本

sdk install java 11.0.9.hs-adpt
sdk default java 11.0.9.hs-adpt

不过安装过程中需要从国外下载相关资源 ,笔者在尝试后使用体验并不是很好,所有建议大家下载指定版本 GraalVM 安装即可(和 JDK 安装方式一样)。

安装成功查看版本

⋊> ~ java -version11:30:34
openjdk version "11.0.9" 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)
安装 native-image

native-image 是由 Oracle Labs 开发的一种 AOT 编译器,应用所需的 class 依赖项及 runtime 库打包编译生成一个单独可执行文件。具有高效的 startup 及较小的运行时内存开销的优势。

但 GraalVM 并未内置只是提供 gu 安装工具,需要我们单独安装。

- 切换到 jdk 的安装目录
⋊> ~ cd $JAVA_HOME/bin/

- 使用gu命令安装
⋊> ./gu install native-image
初始化 Spring Boot 2.4 项目

Spring Initializr 创建 demo 项目

curl https://start.spring.io/starter.zip -d dependencies=web 
   -d bootVersion=2.4.1 -o graal-demo.zip

先看一下启动基准数据 , 单纯运行空项目 需要 1135 ms 秒

java -jar demo-0.0.1-SNAPSHOT.jar
engine: [Apache Tomcat/9.0.41]
2020-12-18 11:48:36.856 INFO 91457 --- [   main] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext
2020-12-18 11:48:36.856 INFO 91457 --- [   main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1135 ms

内存占用情况

ps aux | grep demo-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $11 "t" $6/1024"MB" }'
/usr/bin/java	480.965MB
支持 GraalVM

增加相关依赖,涉及插件较多完整已上传 Gitee Gist



 org.springframework.experimental
 spring-graalvm-native
 0.8.3


 org.springframework
 spring-context-indexer




 
  spring-milestones
  Spring Milestones
  https://repo.spring.io/milestone
 

Main 方法修改,增加属性 proxyBeanMethods = false

@SpringBootApplication(proxyBeanMethods = false)

使用 native-image 构建可执行文件

mvn -Pnative package
#构建过程比较慢,日志如下
spring.factories files...
[com.example.demo.demoapplication:93430] classlist: 4,633.58 ms, 1.18 GB
 _____      _ _ __   __  _
 / ___/ ____ _____ (_) ____ ____ _   / | / / ____ _ / /_ (_) _ __ ___
 __  / __  / ___/ / / / __  / __ `/   / |/ / / __ `/ / __/ / / | | / / / _ 
 ___/ / / /_/ / / /  / / / / / / / /_/ /   / /| / / /_/ / / /_ / / | |/ / / __/
/____/ / .___/ /_/  /_/ /_/ /_/ __, /   /_/ |_/ __,_/ __/ /_/ |___/ ___/
  /_//____/

...
[com.example.demo.demoapplication:93430]  [total]: 202,974.38 ms, 4.23 GB
编译结果

在 targe 目录生成 名称为 com.example.demo.demoapplication 可执行文件

启动应用 这里执行的编译后的可执行文件而不是 jar

cd target

./com.example.demo.demoapplication

启动时间 0.215 seconds

2020-12-18 12:30:40.625 INFO 94578 --- [   main] com.example.demo.DemoApplication   : Started DemoApplication in 0.215 seconds (JVM running for 0.267)

看一下内存占用 24.8203MB

ps aux | grep com.example.demo.demoapplication | grep -v grep | awk '{print $11 "t" $6/1024"MB" }'

./com.example.demo.demoapplication	24.8203MB

数据对比

是否引入 GraalVM 内存占用 启动时间
480.965MB 1135 ms
24.8203MB 215 ms

到此这篇关于Spring Boot 2.4新特性减少95%内存占用问题的文章就介绍到这了,更多相关Spring Boot 2.4新特性内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/129710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号