JVM堆设置模式

8
我注意到在设置堆大小时,人们更喜欢使用64、128、256、1024等数值。如果我给出这些数字之间的值(比如500),JVM不会接受吗?为什么这些数字很重要且备受青睐?为什么我们也按照这种模式升级RAM?
请帮助我理解。

可能是因为人们更喜欢将其内存模块装满JVM :) - Viktor Stolbin
1
四舍五入的数字很好看。至于RAM升级,请尝试找到一个743 MB的模块。 - Marko Topolnik
这里的答案陈述了一些可能需要更多证明的观点。由于缺乏证据,被接受的答案可能是我们最安全的选择。但我希望其他答案能够得到一些支持。 - Sander Verhagen
5个回答

8

JVM可以接受任何值,这并没有问题。使用2的n次方的值只是一种“惯例”,在实践中使用其他值也不会产生负面影响。


2

如果您这样考虑:

  • 1个字节等于8个比特

  • 1千字节(KB)= 1024个字节

  • 1兆字节(MB)= 1024 KB

  • 1吉字节(GB)= 1024 MB

  • ……以此类推……

这不仅仅是2^n。在计算机的内存方面,一切都与数字8密切相关 - 这是大多数现代计算机中定义一个字节的数字。

比特被分组在一起的主要原因是为了表示字符。由于所有计算机事物的二进制性质,理想的“块”比特是2的幂次方,即1、2、4、8、16、32……(基本上是因为它们总是可以被分成相等的较小包裹(这也创造了存储大小的快捷方式,但那是另一个故事))。显然,4个比特(在某些领域中称为nybble)可以给我们16个唯一的字符。由于大多数字母表都比这更大,所以2^8(或256个字符)是更合适的选择。

存在使用其他长度字节(特别是7或9)的机器。这主要是因为它们不太容易操作而没有得到广泛应用。您肯定不能将奇数一分为二,这意味着如果您要分割字节,则必须跟踪比特串的长度。

最后,8也是一个方便的数字,许多人(如心理学家等)声称人类大脑通常只能立即回忆起7-8件事情(不进行记忆技巧的情况下)。


这个答案关注的是机器的理想字节大小,但我不明白它与JVM堆大小(它是字节的倍数)有什么联系。 - Alexander

0
除了非书面约定外,它还会对性能产生影响 - 取决于机器的架构。
例如,如果一台机器是三进制的,那么将堆大小设置为3的幂值会使其运行更加高效。

“如果将堆大小设置为3的幂次方,它会更有效。" 为什么呢?如果这是真的,那么二进制机器使用2的幂次方也是正确的吗? - Alexander

0
如果它不接受该值,请检查您是否在数量后面放置了兆字节Mm)或千兆字节Gg)修饰符。
例如:java -Xms500M -Xmx500M -jar myJavaProgram.jar 此外,请查看此链接

0
为什么我们在这种模式下也要升级RAM呢?
因为内存芯片/卡的大小是2的幂字节。这个基本原因是使电子元件更简单。而简单意味着更便宜、更可靠和(可能)更快。

据我所知,内存大小是2的幂次方,这是因为内存总线大小的原因。我将使用一个小而简单的数字例子来说明。假设您有一台拥有128字节内存(内存空间范围为0b0000_0000到0b0111_1111)的机器,您想将其升级到192字节(这需要新的寻址能力0b0111_1111 - 0b1011_1111)。这将需要将内存总线从7个引脚扩展到8个引脚。但此时,您将获得寻址256字节的能力(最大地址0b1111_1111),其中一半将被浪费。 - Alexander
如果是正确的话,那么我不明白它与JVM大小有什么关系。 - Alexander
我的回答中没有提到JVM大小。我只是回答了关于RAM大小的问题。 - Stephen C
哦,没错,我想我是因为整个问题而读入了其中的意思。很有道理。不过,我的第一条评论理解正确吗? - Alexander

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