Java选项-Xmx代表什么?

317

java -Xmx1024m filename

-Xmx 是什么意思?


16
顺便说一下:以“-X”开头的选项在不同平台上是非标准的,可能会在将来被删除。现在有一个名为“-mx”的标准选项,它更短并且具有相同的功能,但文档记录较差。 :( 同样,“-Xms”可以使用“-mx”替代。 - Peter Lawrey
3
为什么要用“mx”呢?我们是如何得出“m”代表堆大小,“x”代表最大值的结论的?至少“s”代表“起始”还有些道理。 - Patrick McElhaney
4
看起来,“m”代表“memory”,而“x”代表“max”,因为你不能使用“m”(“max”和“min”都会有相同的首字母),使用最后一个字符让“x”代表“max”,“n”代表“min”。 - Jazz
5个回答

369

请看这里:Java工具文档,它说:

-Xmxn
指定内存分配池的最大大小(以字节为单位)。该值必须是大于2MB的1024的倍数。附加字母k或K表示千字节,m或M表示兆字节。默认值为64MB。在Solaris 7和Solaris 8 SPARC平台上,此值的上限将约为4000m,在Solaris 2.6和x86平台上将为2000m,减去开销金额。例如:

           -Xmx83886080
           -Xmx81920k
           -Xmx80m
所以,简单来说,你将Java堆内存设置为最大1024 MB可用内存,不多也不少。
请注意,-Xmx和1024m之间没有空格
使用大小写不重要。例如:" -Xmx10G" 和 " -Xmx10g" 效果完全一样。

32
有些误导人的是,Xmx和Xms的值并不是JVM使用的所有内存大小,只是的大小。参见typo.pl的回答。 - GreenGiant
2
我希望找到X的含义,因为我想知道-XX代表什么意思。这个快捷方式是什么意思... - Sebastian
19
在单位后面添加“G”或“g”来表示千兆字节。 :) - Asa
2
值得注意的是,如果你想让 -X 参数被所有 Java 进程全局识别,你可以设置 JAVA_TOOL_OPTIONS 环境变量,例如 export JAVA_TOOL_OPTIONS="-Xmx6g"。参考 [https://dev59.com/1mMm5IYBdhLWcg3wMs7R] 和 [https://dev59.com/114c5IYBdhLWcg3wFm44]。 - CCJ
1
谢谢!我在寻找单位大小写敏感性的情况,并得到了确切的答案。 - asgs
显示剩余2条评论

179
C:\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
    -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.

The -X options are non-standard and subject to change without notice.

15
人们应该真正开始阅读精细的手册...感谢! - user1052080
24
是的,这些一行描述非常详尽,包括了所有内容。这就是为什么没有人需要StackOverflow。如果他们允许你对单个参数提供帮助,并更详细地查看设置这些参数的影响,例如为命令的参数编写手册页面等,那可能就不会那么糟糕了。 - Craig Brett

21

-Xmx选项更改了VM的最大堆空间。java -Xmx1024m意味着VM可以分配最多1024 MB的内存。通俗地说,这意味着该应用程序最多可以使用1024MB的内存。


谢谢,但是当我运行这个命令时,我遇到了以下错误: 1)无效的最大堆大小:-Xmx 2)无法创建Java虚拟机。你能帮我吗? - ravi
1
你需要在-Xmx和大小之间去掉空格(写成这样:java -Xmx1024m。而不是这样:java -Xmx 1024m)。 - Aleksander Blomskøld
请注意,您的应用程序可能仍然会使用更多的内存,因为您需要包括VM开销,这就是当您希望将Java放入cgroup内存限制时会变得棘手的原因。 - Jakub Głazik
我不同意这个观点。-Xmx只是堆大小,因此技术上Java进程可以占用超过-Xmx内存。我们没有考虑本地堆栈和VM开销。 - Lokesh
请阅读以下文章。-Xmx设置仅适用于堆大小,而不适用于整个Java进程。 https://plumbr.io/blog/memory-leaks/why-does-my-java-process-consume-more-memory-than-xmx - Lokesh

15

该应用程序的最大堆使用量为1024 MB。


8

-Xmx 设置最大堆大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接