設定堆 PermGen 和堆疊大小
當 Java 虛擬機器啟動時,它需要知道堆的大小和執行緒堆疊的預設大小。可以使用 java
命令上的命令列選項指定這些選項。對於 Java 8 之前的 Java 版本,你還可以指定堆的 PermGen 區域的大小。
請注意,在 Java 8 中刪除了 PermGen,如果你嘗試設定 PermGen 大小,則將忽略該選項(帶有警告訊息)。
如果未明確指定堆大小和堆疊大小,則 JVM 將使用以版本和平臺特定方式計算的預設值。這可能會導致你的應用程式使用太少或太多的記憶體。這通常適用於執行緒堆疊,但對於使用大量記憶體的程式來說可能會有問題。
設定 Heap,PermGen 和預設堆疊大小:
以下 JVM 選項設定堆大小:
-Xms<size>
- 設定初始堆大小-Xmx<size>
- 設定最大堆大小-XX:PermSize<size>
- 設定初始 PermGen 大小-XX:MaxPermSize<size>
- 設定最大 PermGen 大小-Xss<size>
- 設定預設的執行緒堆疊大小
<size>
引數可以是多個位元組,或者可以具有 k
,m
或 g
的字尾。後者分別以千位元組,兆位元組和千兆位元組為單位指定大小。
例子:
$ java -Xms512m -Xmx1024m JavaApp
$ java -XX:PermSize=64m -XX:MaxPermSize=128m JavaApp
$ java -Xss512k JavaApp
查詢預設大小:
-XX:+printFlagsFinal
選項可用於在啟動 JVM 之前列印所有標誌的值。這可用於列印堆和堆疊大小設定的預設值,如下所示:
-
適用於 Linux,Unix,Solaris 和 Mac OSX
$ java -XX:+ PrintFlagsFinal -version | grep -iE’HapSize | PermSize | ThreadStackSize'
-
對於 Windows:
java -XX:+ PrintFlagsFinal -version | findstr / i
HeapSize PermSize ThreadStackSize
上述命令的輸出類似於以下內容:
uintx InitialHeapSize := 20655360 {product}
uintx MaxHeapSize := 331350016 {product}
uintx PermSize = 21757952 {pd product}
uintx MaxPermSize = 85983232 {pd product}
intx ThreadStackSize = 1024 {pd product}
大小以位元組為單位。