设置堆 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}
大小以字节为单位。