哪些参数代表JVM内存选项中的内容?

有很多JVM参数影响JVM的内存使用情况,如-Xms, -Xmx, -Xns, -XX:MaxPermSize...

  • 他们在做什么?
  • 还有吗?
  • 当我得到什么错误时,我必须增加哪一个(例如OutOfMemoryErrorStackOverflowError …)?

我找不到一个好的备忘单 – 让我们在这里创建一个。

-Xms:此选项设置初始和最小Java堆大小。

-Xmx:此选项设置最大Java堆大小。 Java堆(“堆”)是内存块的一部分,其中内存块分配给对象并在垃圾回收期间释放。

-XX:PermSize: -XX:MaxPermSize:用于设置Permanent Generation的大小。 永久空间存储了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值。 通过增加堆栈大小可能会有所帮助,但您也应该查看代码。

有数百种JVM选项可供选择。 基本上它们分为三种类型:

  1. 标准选项,
  2. 非标X选项,
  3. 非标准XX选项,

几个标准选项列表:[查看完整列表执行命令“java”没有任何选项]

  -client to select the "client" VM -server to select the "server" VM -cp  -classpath  A ; separated list of directories, JAR archives, and ZIP archives to search for class files. -D= 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 set initial Java heap size -Xmx set maximum Java heap size -Xss set java thread stack size -Xprof output cpu profiling data -Xmixed mixed mode execution (default) -Xint interpreted mode execution only 

少数非标准XX选项列表:[ 此处提供完整列表]

 -XX:InitialHeapSize= set initial Java heap size. Same as -Xms. -XX:MaxHeapSize= set maximum Java heap size. Same as -Xmx. -XX:+PrintFlagsFinal prints all JVM options passed. -XX:+UnlockDiagnosticVMOptions opens up lot more VM options. 

如果您想增强您对JVM选项的了解,请参阅此博客 。 链接只是第8部分中的第1部分。查找并阅读其他部分。

-Xss:堆栈大小。

用于设置堆栈的大小。 堆栈值仅存在于它们创建的函数范围内。一旦函数返回,它们将被丢弃。

耗尽堆栈空间的最简单方法是递归太深。

-Xms,-Xmx:最小和最大堆大小。

用于设置堆的大小。 堆是您分配对象的位置。 对象一直存在,直到它们被垃圾收集。

耗尽堆空间的最简单方法是分配大量的东西。

-XX:MaxPermSize:永久生成。

永久生成是特殊的,因为它保存虚拟机所需的数据,以描述在Java语言级别上没有等价的对象。 例如,描述类和方法的对象存储在永久代中。

如果您以某种方式泄漏对动态加载的类的引用,则通常会耗尽permgen空间。 这特别困扰了一些网络容器。

阅读JVM选项说明 。 以下是摘录:

  • 如果您经常收到java.lang.OutOfMemoryError: Java heap space错误,您应该增加-Xmx值。
  • 通常-XX:PermSize-XX:MaxPermSize不需要调整,但如果您看到java.lang.OutOfMemoryError: PermGen space事件通常可以增加这些值。
  • -XX:MaxJavaStackTraceDepth – 指定在抛出StackOverflowError之前抛出的错误或exception的堆栈跟踪的条目数。 因此,如果您正在处理大量堆栈跟踪,则可以使用此选项在溢出之前增加允许的命令。