有许多JVM参数会影响JVM的内存使用,例如-Xms、-Xmx、-Xns、-XX:MaxPermSize...
- 它们是干什么用的?
- 还有其他的参数吗?
- 当我遇到什么错误时(例如
OutOfMemoryError
、StackOverflowError
等),我应该增加哪个参数?
我找不到一个好的速查表- 让我们在这里创建一个。
有许多JVM参数会影响JVM的内存使用,例如-Xms、-Xmx、-Xns、-XX:MaxPermSize...
OutOfMemoryError
、StackOverflowError
等),我应该增加哪个参数?我找不到一个好的速查表- 让我们在这里创建一个。
-Xms:
这个选项设置 Java 堆的初始大小和最小大小。
-Xmx:
这个选项设置 Java 堆的最大大小。Java 堆(“堆”)是内存的一部分,用于为对象分配内存块,并在垃圾回收期间释放。
-XX:PermSize:
-XX:MaxPermSize:
用于设置永久代的大小。永久空间是 VM 使用的存储类、方法、内部化字符串和类似对象的地方,这些对象永远不会被释放(因此得名)。
-Xss:
设置线程堆栈大小。线程堆栈是为每个 Java 线程分配的内存区域,用于其内部使用。这是线程存储其局部执行状态的位置。
-Xns:
设置 nursery 大小。JRockit JVM 在使用分代垃圾回收模型时使用 nursery,也就是当动态垃圾回收器确定应该使用分代垃圾回收模型或选择了静态分代并发垃圾回收器(-Xgc:gencon)时。您还可以使用 -Xns 在运行动态垃圾回收器(-XgcPrio)时设置静态 nursery 大小。
如果出现 java.lang.OutOfMemoryError: Java heap space
的错误,则请更改 -Xmx
和 -Xms
的值。
如果出现 java.lang.OutOfMemoryError: PermGen space
的错误,则尝试增加 -XX:MaxPermSize
的值。
如果出现 java.lang.StackOverflowError
的错误,则尝试增加 -Xss
的值。增加堆栈大小可能有所帮助,但您也应该查看代码。
有数百个JVM选项可用,基本上它们分为三类:
一些标准选项列表:[要查看完整列表,请执行不带任何选项的“java”命令]
-client to select the "client" VM
-server to select the "server" VM
-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
A ; separated list of directories, JAR archives,
and ZIP archives to search for class files.
-D<name>=<value>
set a system property
-version print product version and exit
-showversion print product version and continue
-X print help on non-standard options`
少数非标准 X 选项列表:[要查看完整列表,请执行命令 "java -X"]
-Xincgc enable incremental garbage collection
-Xms<size> set initial Java heap size
-Xmx<size> set maximum Java heap size
-Xss<size> set java thread stack size
-Xprof output cpu profiling data
-Xmixed mixed mode execution (default)
-Xint interpreted mode execution only
一些非标准的XX选项列表:[完整列表可在这里查看]
-XX:InitialHeapSize=<size> set initial Java heap size. Same as -Xms<size>.
-XX:MaxHeapSize=<size> set maximum Java heap size. Same as -Xmx<size>.
-XX:+PrintFlagsFinal prints all JVM options passed.
-XX:+UnlockDiagnosticVMOptions opens up lot more VM options.
如想加强对JVM选项的了解,请参考这篇博客,该链接只是8个部分中的第一部分。请查找并阅读其他部分。
阅读解释JVM选项。以下是其中的摘录:
java.lang.OutOfMemoryError: Java heap space
错误,则应增加-Xmx
值。-XX:PermSize
和-XX:MaxPermSize
,但如果经常看到java.lang.OutOfMemoryError: PermGen space
事件,则可以增加这些值。-XX:MaxJavaStackTraceDepth
- 这指定了在抛出错误或异常时堆栈跟踪可以具有多少条目,然后会抛出StackOverflowError
。因此,如果您正在处理巨大的堆栈跟踪,则可以使用此选项在溢出之前增加允许的条目数。