有很多JVM参数影响JVM的内存使用情况,如-Xms, -Xmx, -Xns, -XX:MaxPermSize...
OutOfMemoryError
,StackOverflowError
...)?我找不到一个好的备忘单 - 让我们在这里创建一个。
答案 0 :(得分:48)
-Xms:
此选项设置初始和最小Java堆大小。
<强> -Xmx:
强>
此选项设置最大Java堆大小。 Java堆(“堆”)是内存块的一部分,其中内存块被分配给对象并在垃圾回收期间释放。
-XX:PermSize:
-XX:MaxPermSize:
用于设置永久代的大小。永久空间存储了VM使用的类,方法,内部化字符串和类似对象,并且永远不会被释放(因此名称)。
-Xss:
设置线程堆栈大小。线程堆栈是为每个Java线程分配的内存区域,供内部使用。这是线程存储其本地执行状态的地方。
-Xns:
设置托儿所的大小。当使用分代垃圾收集模型时,JRockit JVM使用托儿所,也就是说,当动态垃圾收集器确定应该使用分代垃圾收集模型时或者静态分代并发垃圾收集器(-Xgc:gencon)已经使用时选择。您还可以在运行动态垃圾收集器(-XgcPrio)时使用-Xns设置静态托儿所大小。
如果您获得 java.lang.OutOfMemoryError: Java heap space
而不是更改-Xmx
和-Xms
的值。
如果您获得 java.lang.OutOfMemoryError: PermGen space
,请尝试提高- XX:MaxPermSize
值。
如果您获得 java.lang.StackOverflowError
,请尝试增加-Xss
值。通过增加堆栈大小可能会有所帮助,但您也应该查看代码。
答案 1 :(得分:11)
有数百种可用的JVM选项。基本上它们分为三种类型:
几个标准选项列表:[查看完整列表执行命令&#34; java&#34;没有任何选择]
-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选项列表:[查看完整列表执行命令&#34; java -X&#34;]
-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选项列表:[可用完整列表here]
-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选项的了解,请参考this blog。链接只是第8部分中的第1部分。查找并阅读其他部分。
答案 2 :(得分:1)
-Xss:堆栈大小。
用于设置堆栈的大小。堆栈值仅存在于它们创建的函数范围内。一旦函数返回,它们将被丢弃。
耗尽堆栈空间的最简单方法是递归太深。
-Xms,-Xmx:最小和最大堆大小。
用于设置堆的大小。堆是您分配对象的位置。对象一直存在,直到它们被垃圾收集。
用尽堆空间的最简单方法是分配大量的东西。
-XX:MaxPermSize:永久生成。
永久代是特殊的,因为它包含虚拟机所需的数据,用于描述在Java语言级别没有等价的对象。例如,描述类和方法的对象存储在永久代中。
如果您以某种方式泄漏对动态加载的类的引用,通常会耗尽permgen空间。这特别困扰了一些网络容器。
答案 3 :(得分:1)
阅读JVM options explained。这里摘录了它:
java.lang.OutOfMemoryError: Java heap space
错误,则应增加-Xmx
值。-XX:PermSize
和-XX:MaxPermSize
不需要调整,但如果您经常看到java.lang.OutOfMemoryError: PermGen space
个事件,则可以增加这些值。-XX:MaxJavaStackTraceDepth
- 指定在抛出StackOverflowError
之前抛出的错误或异常的堆栈跟踪的条目数。因此,如果您正在处理大量堆栈跟踪,则可以使用此选项在溢出之前增加允许的命令。