启动JVM时-Xms和-Xmx参数是什么?

时间:2013-02-07 23:28:21

标签: java memory-management parameters jvm

请解释在JVM中使用XmsXmx参数。它们的默认值是什么?

7 个答案:

答案 0 :(得分:1151)

标志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的,并且JVM可以/将使用的内存多于分配给堆的大小。来自Oracle's documentation

  

请注意,JVM使用的内存多于堆。例如,Java方法,线程堆栈和本机句柄分配在与堆不同的内存中,以及JVM内部数据结构。

答案 1 :(得分:275)

运行命令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选项不标准,如有更改,恕不另行通知。

我希望这有助于您了解XmsXmx以及其他许多重要事项。 :)

答案 2 :(得分:19)

您可以在IDE中指定它。例如,对于Eclipse中的运行配置 VM参数。您可以输入-Xmx800m -Xms500m作为

Enter image description here

答案 3 :(得分:12)

问题本身已经在上面解决了。 只需添加部分默认值。

根据http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html

Xmx的默认值取决于系统中可用的平台和内存量。

答案 4 :(得分:4)

-Xms 用于启动的初始堆大小,但是,在工作过程中,由于用户不活动或GC迭代,堆大小可能小于 -Xms 。 这不是必需的最小堆大小。

-Xmx 最大堆大小

答案 5 :(得分:1)

JVM内存包括以下部分:

  1. 堆内存,它是Java对象的存储空间
  2. 非堆内存,Java用来存储已加载的类和其他元数据
  3. JVM代码本身,JVM内部结构,已加载的探查器代理代码和数据等。

JVM具有一个堆,该堆是运行时数据区域,从中分配了所有类实例和数组的内存。它是在JVM启动时创建的。

可以使用以下VM选项配置堆大小:

-Xmx<size> - to set the maximum Java heap size
-Xms<size> - to set the initial Java heap size

默认情况下,最大堆大小为64 MB。

用于对象的堆内存由称为垃圾收集器的自动内存管理系统回收。根据垃圾收集器的策略,堆的大小可以是固定的,也可以是缩小的。

以下命令以256MB的内存启动JVM,并允许Java进程使用多达4G(4096MB)的内存。

java -Xms256m -Xmx4g

答案 6 :(得分:0)

很简单

Xss 用于设置栈内存大小

Xms 启动堆大小

Xmx 最大堆大小如果未设置 256MB 使用