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

Java 启动JVM时,-Xms和-Xmx参数是什么?,java,memory-management,parameters,jvm,Java,Memory Management,Parameters,Jvm,请解释Xms和Xmx参数在JVM中的用法。它们的默认值是什么?标志Xmx指定Java虚拟机(JVM)的最大内存分配池,而Xms指定初始内存分配池 这意味着您的JVM将以Xms内存量启动,并且将能够使用最大Xmx内存量。例如,像下面这样启动JVM将使用256 MB的内存启动它,并允许进程使用多达2048 MB的内存: java -Xms256m -Xmx2048m 内存标志也可以以不同的大小指定,例如千字节、兆字节等 -Xmx1024k -Xmx512m -Xmx8g Xms标志没有默认值,X

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

标志
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可以而且将使用比分配给堆的大小更多的内存。发件人:

请注意,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
C:\Users\Admin>java-X
-Xmixed混合模式执行(默认)
-仅限Xint解释模式执行
-Xbootclasspath:
设置引导类和资源的搜索路径
-Xbootclasspath/a:
附加到引导类路径的末尾
-Xbootclasspath/p:
在引导类路径前面预先结束
-Xdiag显示其他诊断信息
-Xnoclassgc禁用类垃圾收集
-Xincgc启用增量垃圾收集
-Xloggc:使用时间戳将GC状态记录到文件中
-Xbatch禁用后台编译
-Xms设置初始Java堆大小。。。。。。。。。。。。。。。。。。。。。。。。。
-Xmx设置最大Java堆大小。。。。。。。。。。。。。。。。。。。。。。。。。
-Xss设置java线程堆栈大小
-Xprof输出cpu配置文件数据
-Xfuture启用最严格的检查,预测未来的默认值
-Xrs减少了Java/VM对操作系统信号的使用(参见文档)
-Xcheck:jni对jni函数执行额外的检查
-Xshare:off不尝试使用共享类数据
-Xshare:如果可能,自动使用共享类数据(默认)
-Xshare:on要求使用共享类数据,否则失败。
-XshowSettings显示所有设置并继续
-XshowSettings:all显示所有设置并继续
-XshowSettings:vm显示所有与vm相关的设置并继续
-XshowSettings:properties显示所有属性设置并继续
-XshowSettings:locale显示所有与locale相关的设置并继续
选项-X为非标准选项,如有更改,恕不另行通知。


我希望这将帮助您理解
Xms
Xmx
,以及许多其他最重要的事情。:)

这个问题本身已经在上面讨论过了。 只需添加部分默认值

依照


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

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


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

-Xmx最大堆大小

非常简单

用于设置堆栈内存大小的Xss

Xms启动堆大小


Xmx最大堆大小,如果不设置为256MB已使用

那么,当内存使用量超过Xmx时,jvm将出现内存不足异常。是的,这是正确的。当它试图超过这个值时,尽管它可能会收集垃圾以释放足够的内存。如果仍然没有足够的内存来满足请求,并且堆已经达到最大大小,则会发生
OutOfMemoryError
。当我使用ForkJoin框架时,我的计算机会崩溃,因为它占用了太多内存。有没有可能在OpenJDK上默认没有对内存的硬限制?正如在中所阐明的,通过
-Xms256m
来表示开始时的内存量的明确方式是“256 MiB”,而不是“256 MB”,因为它是按二进制幂而不是十的幂来表示的。看见此外,由于为额外的幸存者空间池留出了一些不可用的空间,因此根据
Runtime.getRuntime().maxMemory()
实际可用的内存量小于通过-XmxA指定的值,该值与堆大小有关:对于其他JVM(除了JRockit),请参阅本文以确定JVM的默认Xmx/Xms值:当使用
-Xmx128m-Xms64m
时,它可以在
275m
RES-mem附近达到峰值,但是当使用
-Xmx128m-Xms128m
时,它可以在
550m
RES-mem附近达到峰值,使用Java 8最好的方法是强调GC并看看会发生什么……只是出于好奇,275m和550m-它们是如何计算的?在OSX上的RubyMine中,它位于“帮助”菜单>“编辑自定义VM选项”中。这并没有回答问题。问题是它们的用途,而不是如何设置。@Hearen如何在intellij中进行sep?您能否提供更多关于“由于用户不活动或GC迭代”的详细信息?那么,初始堆大小和最小堆大小之间有什么区别呢?我可以知道这个答案提供了哪些新信息吗?因为我觉得其他的答案已经提到了同样的信息。