如何讓 Spring Boot 啟動的更快?

      網友投稿 1045 2025-04-04

      來源:http://rrd.me/ekc64

      spring有多快?”

      這是 2018 spring One Platform 中的一場會議。看完會議視頻,我自己動手試了一下。下面是我做出的測試結果。

      還沒有觀看視頻的朋友推薦看一下,非常有意思。

      https://springoneplatform.io/2018/sessions/how-fast-is-spring-

      本文使用的代碼

      https://github.com/bufferings/spring-boot-startup-mybench

      我使用的是 OpenJDK 11。

      可以按照下面這樣運行基準測試。運行起來可能需要一些時間,下面會執行所有的測試。

      1. FluxBaseline

      我使用 SpringInitializr 創建項目,僅包含 Reactive Web。接下來,我會寫一個 WebMVC 風格的極簡controller。

      Spring boot 版本是 2.1.0.RELEASE。

      啟動結果 2.938 ± 0.287 s/op。

      現在,以這個結果作為基線。讓我們從這里開始。

      2. WebMVC

      我很好奇為什么要用 WebMVC 而不是 WebFlux?我嘗試了一下。也許僅僅是為了比較 Tomcat 和 Netty?

      WebFlux 快了一點,難道不是嗎?

      3. spring-context-indexer

      接下來,我試了 spring-context-indexer,似乎創建了 component index。

      嗯…慢了一點點?

      我檢查了 spring.components,發現只包含了一個組件。了解…我應該嘗試更大一點的項目,這樣才能看到效果。

      4. 惰性初始化

      嘗試了惰性初始化。

      查看結果,啟動變快了一點。

      5. NoVerify

      運行加 -noverify 選項:

      啟動變得快了一點。不知道為什么有這個結果,稍后需要仔細了解一下。

      6. TieredStopAtLevel

      運行加 -XX:TieredStopAtLevel=1 選項:

      嗯,快多了!減少了幾乎2秒。還是不知道這個參數有什么含義,稍后需要仔細了解一下。

      7. 指定 SpringConfigLocation 參數

      運行加 -Dspring.config.location=classpath:/application.properties 選項:

      嗯,又變慢了。

      8. 關閉 JMX

      運行加 -Dspring.jmx.enabled=false 選項:

      變得快了一點。

      9. 取消 Logback

      從這里開始,我開始減少函數庫。開始,取消 Logback:

      結果如下:

      嗯…似乎有一點點改進?

      10. 取消 Jackson

      接下來是 Jackson

      結果如下:

      結果變快了一點。

      11. 取消 HibernateValidator

      結果如下:

      也有一點效果。

      到這里為止,不再取消函數庫了。

      如何讓 Spring Boot 啟動的更快?

      12. AppCDS

      AppCDS (Application Class Data Sharing) 是 Oracle JDK 的一個企業版功能。OpenJDK 10 開始包含了這個功能。

      看起來 AppCDS 轉儲信息存到了一個共享壓縮文件,所以啟動時間變短了。

      嗯…并沒有變快…然后我閱讀了CDS的相關文章,找到原因了。

      SpringBoot FatJAR 不在 CDS 管理范圍內。

      13. 使用 Thin Launcher 的 Flux

      嗯,對不起,“Exploded” 基準測試錯了。我曾經試著使用 FatJAR,但是 CDS 不能這么干。所以,我轉而使用 Thin Launcher,所以 “Exploded” 就變成了 “Thin Launche”。

      使用 CDS 以前,我會測試使用 Thin Launcher 打包 JAR 文件的啟動速度。

      盡管我使用 Thin Launcher 打包 app,但并沒有使用 Thin Launcher 啟動類,而是使用 Main class 讓啟動盡可能快一些。

      嗯,快了一點,對嗎?

      14. Thin Launcher + CDS

      現在,我要使用 AppCDS 。

      喔!變得更快了!

      15. 所有操作都上

      最終,我把所有操作都用上。

      小于1秒鐘!(∩′?`)∩耶

      更進一步

      在 Dave 的視頻中,他提到了“函數式 Bean 定義”,嘗試僅使用 Spring 不用 SpringBoot,app變得更快了。其中的道理還需要進一步了解。

      結果:

      真的很有意思。感謝!

      本文轉載自微信公眾號【朱小廝的博客】

      Spring Boot Spring

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Office 2013客戶端Modern認證功能從內部預覽版轉向公共預覽版(office怎么免費永久激活)
      下一篇:預覽快捷鍵(打印預覽快捷鍵)
      相關文章
      亚洲乱人伦精品图片| 国产精品亚洲αv天堂无码| 亚洲第一区精品观看| 亚洲综合视频在线观看| 亚洲人成网站影音先锋播放| 亚洲日本乱码在线观看| 亚洲中文字幕无码专区| 婷婷亚洲天堂影院| 亚洲国产精品成人AV在线| 亚洲日韩中文字幕无码一区| 亚洲国产精品一区二区三区在线观看 | 最新亚洲人成网站在线观看| 亚洲s码欧洲m码吹潮| 亚洲AV无码久久久久网站蜜桃 | 亚洲色成人网一二三区| 久久av无码专区亚洲av桃花岛| 亚洲AV成人精品网站在线播放| 亚洲an天堂an在线观看| 亚洲精品无码成人AAA片| 国内精品久久久久久久亚洲| 国产亚洲精品AA片在线观看不加载| 亚洲第一成人影院| 国产中文在线亚洲精品官网| 精品国产亚洲一区二区在线观看| 亚洲熟妇少妇任你躁在线观看无码| 伊人婷婷综合缴情亚洲五月| 亚洲色偷偷综合亚洲AVYP| 亚洲美女又黄又爽在线观看| 亚洲欧洲无码AV电影在线观看| 亚洲精品无码MV在线观看| 无码欧精品亚洲日韩一区| 亚洲精品影院久久久久久| 中文字幕 亚洲 有码 在线| 亚洲精华液一二三产区| 亚洲av无码专区在线观看亚| 亚洲?V乱码久久精品蜜桃| 青青草原亚洲视频| 久久久久久亚洲精品| 亚洲国产精品美女| 亚洲熟妇无码一区二区三区导航| 风间由美在线亚洲一区|