请解释 JVM 中 Xms
和 Xmx
参数的使用。它们的默认值是什么?
-Xmx128m -Xms64m
时,它可以在 275m
RES 内存附近达到峰值,但是当使用 -Xmx128m -Xms128m
时,它可以在 550m
RES 内存附近达到峰值 使用 Java 8 最好的办法是给 GC 施加压力,看看会发生什么......
标志 Xmx
指定 Java 虚拟机 (JVM) 的最大内存分配池,而 Xms
指定初始内存分配池。
这意味着您的 JVM 将以 Xms
数量的内存启动,并且最多可以使用 Xmx
数量的内存。例如,像下面这样启动 JVM 将使用 256 MB 的内存启动它,并允许进程使用多达 2048 MB 的内存:
java -Xms256m -Xmx2048m
内存标志也可以指定为不同的大小,例如千字节、兆字节等。
-Xmx1024k
-Xmx512m
-Xmx8g
Xms
标志没有默认值,而 Xmx
通常有 256 MB 的默认值。这些标志的常见用途是当您遇到 java.lang.OutOfMemoryError
时。
使用这些设置时,请记住这些设置是针对 JVM 的 heap 的,并且 JVM 可以并且将使用比仅分配给堆的大小更多的内存。从 Oracle's documentation:
请注意,JVM 使用的内存不仅仅是堆。例如,Java 方法、线程堆栈和本机句柄被分配在与堆分开的内存中,以及 JVM 内部数据结构中。
运行命令 java -X
,您将获得所有 -X
选项的列表:
C:\Users\Admin>java -X
-Xmixed mixed mode execution (default)
-Xint interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
prepend in front of bootstrap class path
-Xdiag show additional diagnostic messages
-Xnoclassgc disable class garbage collection
-Xincgc enable incremental garbage collection
-Xloggc:<file> log GC status to a file with time stamps
-Xbatch disable background compilation
-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
-Xfuture enable strictest checks, anticipating future default
-Xrs reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni perform additional checks for JNI functions
-Xshare:off do not attempt to use shared class data
-Xshare:auto use shared class data if possible (default)
-Xshare:on require using shared class data, otherwise fail.
-XshowSettings show all settings and continue
-XshowSettings:all show all settings and continue
-XshowSettings:vm show all vm related settings and continue
-XshowSettings:properties show all property settings and continue
-XshowSettings:locale show all locale related settings and continue
-X 选项是非标准的,如有更改,恕不另行通知。
我希望这将帮助您了解 Xms
、Xmx
以及许多其他最重要的事情。 :)
-Xms 是启动时的初始堆大小,但在工作过程中,由于用户不活动或 GC 迭代,堆大小可能小于 -Xms。这不是所需的最小堆大小。
-Xmx 是最大堆大小
-Xms
并不表示所需的最小堆内存大小。我们正在运行一个 -Xms
设置为 200 GB 的 java 进程,该进程在具有 256 GB RAM 的机器上运行。到目前为止,这个过程只消耗了 10 GB,这是因为到目前为止这个过程没有做太多的活动。所以,这个答案确实证实了这一点,但我希望看到有关此的文档/资源。太感谢了!
您可以在 IDE 中指定它。例如,对于 Run Configurations → VM arguments 中的 Eclipse。您可以输入 -Xmx800m -Xms500m
作为
https://i.stack.imgur.com/lJHpH.png
这个问题本身已经在上面讨论过了。只需添加部分默认值。
根据http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
Xmx 的默认值取决于平台和系统中可用的内存量。
OutOfMemoryError
。-Xms256m
表示您从多少内存开始的明确方式是“256 MiB”,而不是“256 MB”,因为它是二进制幂而不是十的幂。见en.wikipedia.org/wiki/Binary_prefix。此外,由于为额外的 Survivor 空间池预留了一些不可用的空间,因此根据Runtime.getRuntime().maxMemory()
实际可用的内存量小于通过 -Xmx 指定的值