最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot 2.4新特性減少95%內(nèi)存占用問題

 更新時間:2020年12月23日 16:08:05   作者:冷冷zz  
這篇文章主要介紹了Spring Boot 2.4新特性減少95%內(nèi)存占用問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

節(jié)省 95%的內(nèi)存占用,減少 80%的啟動耗時。

GraalVM 是一種高性能的虛擬機,它可以顯著的提高程序的性能和運行效率,非常適合微服務(wù)。最近比較火的 Java 框架 Quarkus 默認(rèn)支持 GraalVM

下圖為 Quarkus 和傳統(tǒng)框架(SpringBoot) 等對比圖,更快的啟動速度、更小的內(nèi)存消耗、更短的服務(wù)響應(yīng)。

Spring Boot 2.4 開始逐步提供對 GraalVM 的支持,旨在提升上文所述的 啟動、內(nèi)存、響應(yīng)的使用體驗。

安裝 GraalVM

目前官方社區(qū)版本最新為 20.3.0 ,是基于 OpenJDK 8u272 and 11.0.9 定制的,可以理解為 OpenJDK 的衍生版本
。

官方推薦的是 SDKMAN 用于快速安裝和切換不同版本 JDK 的工具 ,類似于 nodejs 的 nvm。

使用類似命令即可完成指定版本安裝和指定默認(rèn)版本

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

不過安裝過程中需要從國外下載相關(guān)資源 ,筆者在嘗試后使用體驗并不是很好,所有建議大家下載指定版本 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 開發(fā)的一種 AOT 編譯器,應(yīng)用所需的 class 依賴項及 runtime 庫打包編譯生成一個單獨可執(zhí)行文件。具有高效的 startup 及較小的運行時內(nèi)存開銷的優(yōu)勢。

但 GraalVM 并未內(nèi)置只是提供 gu 安裝工具,需要我們單獨安裝。

- 切換到 jdk 的安裝目錄
⋊> ~ cd $JAVA_HOME/bin/

- 使用gu命令安裝
⋊> ./gu install native-image

初始化 Spring Boot 2.4 項目

Spring Initializr 創(chuàng)建 demo 項目

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

先看一下啟動基準(zhǔn)數(shù)據(jù) , 單純運行空項目 需要 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

內(nèi)存占用情況

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

增加相關(guān)依賴,涉及插件較多完整已上傳 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 構(gòu)建可執(zhí)行文件

mvn -Pnative package
#構(gòu)建過程比較慢,日志如下
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

編譯結(jié)果

在 targe 目錄生成 名稱為 com.example.demo.demoapplication 可執(zhí)行文件

啟動應(yīng)用 這里執(zhí)行的編譯后的可執(zhí)行文件而不是 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)

看一下內(nèi)存占用 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

數(shù)據(jù)對比

是否引入 GraalVM 內(nèi)存占用 啟動時間
480.965MB 1135 ms
24.8203MB 215 ms

到此這篇關(guān)于Spring Boot 2.4新特性減少95%內(nèi)存占用問題的文章就介紹到這了,更多相關(guān)Spring Boot 2.4新特性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決SpringBoot中使用@Async注解失效的問題

    解決SpringBoot中使用@Async注解失效的問題

    這篇文章主要介紹了解決SpringBoot中使用@Async注解失效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 微信小程序獲取手機號的完整實例(Java后臺實現(xiàn))

    微信小程序獲取手機號的完整實例(Java后臺實現(xiàn))

    我們在做小程序開發(fā)的過程中,經(jīng)常會涉及到用戶身份的問題,最普遍的就是我們要獲取用戶的手機號碼,下面這篇文章主要給大家介紹了關(guān)于微信小程序獲取手機號的完整實例,后臺由Java實現(xiàn),需要的朋友可以參考下
    2022-06-06
  • JSONObject與JSONArray的使用

    JSONObject與JSONArray的使用

    這篇文章主要介紹了JSONObject與JSONArray的使用 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • cascade級聯(lián)關(guān)系操作案例詳解

    cascade級聯(lián)關(guān)系操作案例詳解

    這篇文章主要介紹了cascade級聯(lián)關(guān)系,主要包括級聯(lián)保存,級聯(lián)修改,級聯(lián)刪除案例,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Token登陸驗證機制的原理及實現(xiàn)

    Token登陸驗證機制的原理及實現(xiàn)

    這篇文章介紹了Token登陸驗證機制的原理及實現(xiàn),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • java使用正則表達(dá)校驗手機號碼示例(手機號碼正則)

    java使用正則表達(dá)校驗手機號碼示例(手機號碼正則)

    這篇文章主要介紹了java使用正則表達(dá)校驗手機號碼示例,可校驗三個號碼段:13*、15*、18*,大家根據(jù)自己的需要增加自己的號碼段就可以了
    2014-03-03
  • 基于Java多線程notify與notifyall的區(qū)別分析

    基于Java多線程notify與notifyall的區(qū)別分析

    本篇文章對Java中多線程notify與notifyall的區(qū)別進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05
  • 一文讀懂Java Iterator(迭代器)

    一文讀懂Java Iterator(迭代器)

    這篇文章主要介紹了Java Iterator(迭代器)的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 淺析Java.IO輸入輸出流 過濾流 buffer流和data流

    淺析Java.IO輸入輸出流 過濾流 buffer流和data流

    這篇文章主要介紹了Java.IO輸入輸出流 過濾流 buffer流和data流的相關(guān)資料,本文給大家介紹的非常詳細(xì),具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • SpringBoot?項目瘦身maven/gradle詳解

    SpringBoot?項目瘦身maven/gradle詳解

    這篇文章主要介紹了SpringBoot項目瘦身(maven/gradle),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01

最新評論

西平县| 郓城县| 三穗县| 曲阳县| 宜都市| 文水县| 松江区| 博客| 阿图什市| 金坛市| 高雄市| 阳春市| 龙江县| 若尔盖县| 衡山县| 辽源市| 麦盖提县| 安平县| 崇左市| 鄂托克前旗| 荔浦县| 河南省| 松阳县| 永城市| 台北县| 洞口县| 莱州市| 金堂县| 绥阳县| 江山市| 肇东市| 呼玛县| 云林县| 徐水县| 称多县| 定结县| 岗巴县| 瓦房店市| 大方县| 平舆县| 洛川县|