中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot 2.4的新特性是什么

發布時間:2020-12-24 14:03:28 來源:億速云 閱讀:362 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關Spring Boot 2.4的新特性是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

節省 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 -version              11: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

<!-- 新增的部分,注意需要增加 spring maven 倉庫地址才能下載到-->
<dependency>
 <groupId>org.springframework.experimental</groupId>
 <artifactId>spring-graalvm-native</artifactId>
 <version>0.8.3</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context-indexer</artifactId>
</dependency>

<!--需要添加 spring maven 倉庫下載 spring-graalvm-native-->
<repositories>
 <repository>
  <id>spring-milestones</id>
  <name>Spring Milestones</name>
  <url>https://repo.spring.io/milestone</url>
 </repository>
</repositories>

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.965MB1135 ms
24.8203MB215 ms

關于Spring Boot 2.4的新特性是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

全椒县| 云林县| 司法| 宁武县| 广平县| 竹北市| 米林县| 中方县| 安远县| 华宁县| 宝坻区| 平乐县| 双峰县| 商丘市| 班戈县| 兴海县| 石柱| 若尔盖县| 天峨县| 晋宁县| 黄石市| 宁都县| 静乐县| 静海县| 永靖县| 黑河市| 红桥区| 瑞丽市| 洪江市| 青龙| 永康市| 平南县| 塘沽区| 靖西县| 高阳县| 湛江市| 宝坻区| 衡山县| 琼海市| 铜川市| 班戈县|