Java内存限制-Xmx后缀:大小写m/M和g/G的区别

30

众所周知,可以使用-Xmx<amount><unit>来限制Java堆大小,其中unit是数据量单位,如千兆字节、兆字节等。

我知道-Xmx128M表示128 Mebibytes(= 128 * 1024 * 1024字节)。

但是,是否真的可以使用十进制单位,例如使用-Xmx100m(这将是100 * 1000 * 1000字节)?

因此,是否可以使用小写单位后缀,例如k,m,g而不是K,M,G 来使用这些十进制单位?


3
顺便说一句,情况通常很重要,只是javac不在意。注意:不用纠结于g/G表示100^3还是1024^3,因为它实际上都不完全对。;) 在我的系统上,运行带有“-Xmx1g”的“System.out.println(Runtime.getRuntime().maxMemory())”命令会打印出“954728448”。 - Peter Lawrey
@PeterLawrey 很有趣。 - MinecraftShamrock
3个回答

42

k和K没有区别,两者都表示 kibibyte,同样m/M= mebibyte & g/G = gibibyte。您可以将值设置为100m,它将是100 * 1024 * 1024字节。通常建议在2的次幂中使用此值。

希望对您有所帮助。


4
使用2的幂次方数值为什么是可取的?我对此有疑问。如果您想向8G服务器添加1G,那应该没有问题。 - Brian Agnew
直到几年前,使用二的幂是一种流行的惯例,但我认为这种做法并没有任何优势。 - undefined

4

为什么不试试使用-Xmx100m-Xmx100M,并查看是否有任何区别。
k,m,gK,M,G完全相同-它们都表示二进制单位。


1
好的。谢谢你的回答。 - MinecraftShamrock

2

JVM命令行参数使用的所有内存大小都以二进制单位(Kibibyte,Mebibyte等)指定,无论单位大小写如何;其中“千字节”是1024字节,其他单位的增加幂次方为1024。

这个答案提供了更完整的技术解释。


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