1. 概述
在本教程中,我們將學習 Spring Boot 應用程序使用的默認內存設置。
通常,Spring 沒有內存特定的配置,它會使用底層 Java 進程的配置運行。因此,以下是我們可以配置 Java 應用程序內存的方法。
2. 內存設置
Java 進程或 JVM 的內存被劃分為堆、棧、 元區、JIT 代碼緩存和共享庫。
2.1. 堆 (Heap)
堆 (Heap) 是指對象在垃圾收集器回收之前存儲的內存區域。
默認情況下,最小堆 (minimum heap) 的值是 8 MB 或物理內存的 1/64,範圍在 8 MB 到 1 GB 之間。
最大堆 (maximum heap) 的默認值是 對於物理內存大於 192 MB 的情況,為物理內存的 1/4;否則,為物理內存的 1/2。
在堆 (Heap) 內部,我們有幼年代大小限制 (nursery size limit)。當該限制超過時,會導致新的生成器垃圾回收運行。 其默認值取決於平台。
我們還擁有保留區限制 (keep area limit)。它指的是總堆大小的百分比,當該百分比達到時,足夠長壽的對象會被從年輕代 (young generation) 提升到老代 (old generation)。 其默認值為 25%。
自 Java 8 以來,我們還擁有元空間 (meta-space) 作為堆的一部分,其中存儲了所有類元數據。 默認情況下,其最小值為 <nbsp;平台相關,最大值為無限。
要覆蓋最小堆、最大堆和元空間大小的默認值,請參閲有關配置堆大小的這篇帖子。
我們可以使用 -Xns 參數覆蓋幼年代大小限制。 由於幼年代是堆的一部分,其值不應大於 -Xmx 值:
java -Xns:10m MyApplication我們還可以使用 –XXkeepAreaRatio 參數來覆蓋默認的保留區域限制。例如,我們可以將其設置為 10%:
java -XXkeepAreaRatio:10 MyApplication以下是翻譯後的內容:
最後,以下是如何在 Linux 上檢查堆大小:
java -XX:+PrintFlagsFinal -version | grep HeapSize以下是翻譯後的內容:
檢查 Windows 上堆大小的相同命令將是:
java -XX:+PrintFlagsFinal -version | findstr HeapSize2.2. 堆棧
堆棧是為每個線程提供的執行內存量。其 默認值為平台特定。
因此,我們可以使用 -Xss 參數來定義線程堆棧大小。例如,我們可以將其分配為 512KB:
java -Xss:512k MyApplication我們可以然後在 Linux 上檢查線程堆棧大小:
java -XX:+PrintFlagsFinal -version | grep ThreadStackSize或者在 Windows 機器上執行相同的操作:
java -XX:+PrintFlagsFinal -version | findstr ThreadStackSize3. 結論
本文介紹了 Java 應用程序中可用的堆和棧內存配置選項的默認值。
因此,在啓動 Spring Boot 應用程序時,我們可以根據我們的要求定義這些參數。