iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

探索 Spring Boot Doc系列 第 12

Doc 6.8.1. Diagnosing Classloading Issues(ㄧ)

  • 分享至 

  • xImage
  •  

官方原文(一)

As described in the Restart vs Reload section, restart functionality is implemented by using two classloaders. For most applications, this approach works well. However, it can sometimes cause classloading issues, in particular in multi-module projects.

在 Restart vs Reload 章節之中,功能性地重啟被兩個類別載入所實做。對多數的應用,這種實作方式良好運作。但是,在多模組的專案情形,會造成類別載入議題。

官方原文(二) Restart vs Reload

The restart technology provided by Spring Boot works by using two classloaders. Classes that do not change (for example, those from third-party jars) are loaded into a base classloader. Classes that you are actively developing are loaded into a restart classloader. When the application is restarted, the restart classloader is thrown away and a new one is created. This approach means that application restarts are typically much faster than “cold starts”, since the base classloader is already available and populated.

簡言之,上方的官方文檔內容說到,在一個應用之中,引入的第三方 jar 包其中的類別,是不會改變的,畢竟我們通常是將對方寫的 function 或是 功能,直接透過建立物件或是由Spring 注入成 bean 的方式調用其內容,不會更動到其中的程式碼; 另一方面,有些類別明顯就是你在開方時自己撰寫的部分,開發之中自然是不間斷地更動,再重新編譯成 class 檔案最後由機器執行。
那….一堆不會有變更,編譯成class檔案之後,就再也不會變動,那何必再和那些你開發的類別放在一起編譯呢 ? 畢竟編譯需要時間、和運算成本,所以這裡就透過兩個類別載入去打到分流。

關於 cold start

在下方 amazon 的文章之中,有提到 一個新的 JVM 的啟動並載入類別的時間,就被稱之冷啟動(cold start) ,所以上述依據類別的變動程度,減少載入的類別,冷啟動時間自然就會減少。

下一篇想延伸探討關於 JVM 之中的 ClassLoader ,以及關於 Spring restart 是用到哪一些ClassLoader 的內容。

參考資料

{官方} Diagnosing Classloading Issues

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.devtools.diagnosing-classloading-issues

{Amazon 官方} Optimizing AWS Lambda function performance for Java

https://aws.amazon.com/tw/blogs/compute/optimizing-aws-lambda-function-performance-for-java/


上一篇
Doc 6.6 & Doc 6.7.2 Running as a Packaged Application
下一篇
ClassLoader
系列文
探索 Spring Boot Doc30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言