需求緣起:在研究Spring Boot加速啟動的時候,發現我們在實際中,可能比較注重我們服務器的內存的情況,那么我們會想如果在啟動的時候,所占用的內存越低是越好,基於這個想法,我們看看Spring Boot啟動之后的一個內存占用情況。
我們看看本節的大綱:
(1)Spring Boot之Tomcat內存情況;
(2)Spring Boot之Undertow內存情況;
接下來看下具體看下每個部分的內容:
(1)SpringBoot之Tomcat內存情況;
我們知道,默認情況下,Spring Boot使用Tomcat來作為內嵌的Servlet容器。我們啟動項目之后可以使用VisualVM進行查看應用所占的內存情況:
(1)進入到你的jdk的安裝目錄下bin,找到:jvisualvm.exe,雙擊打開
(2)雙擊打開之后,你能在左邊操作欄找到【本地】--【應用程序的包名】--【雙擊打開】:




以上是我使用Spring Boot默認的方式啟動應用后,用VisualVM監控到的內存占用情況:堆內存占用50M,17個線程被開啟。沒有比較就沒有傷害,一比較我嚇一跳,哈哈,單獨的一個tomcat是無法看出來效果的,我們看看Undertow的情況下。
(2)SpringBoot之Undertow內存情況;
我們將Web服務器切換到Undertow來提高應用性能。Undertow是一個Java開發的靈活的高性能Web服務器,提供包括阻塞和基於NIO的非阻塞機制。Undertow是紅帽公司的開源產品,是Wildfly默認的Web服務器。首先,從依賴信息里移除Tomcat配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 從依賴信息里移除 Tomcat配置 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
然后添加Undertow:
<!-- 添加 Undertow依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
啟動項目,用VisualVM監控到的信息顯示:堆內存占用50M,16個線程被開啟。。


我這里只是一個HelloWorld代碼,實際項目中應該會更明顯。
具體可以參考國外的一篇文章進行學習研究:
