我在设置堆大小时观察到人们更喜欢值 64,128,256,1024..。如果我在这些数字之间给出一个值(比如 500),JVM 不会接受这个值吗?为什么这些数字很重要和首选?为什么我们还要以这种模式升级 RAM?
请帮我理解。
JVM 将接受任何值,这没有问题。使用 2^n 值只是一种“约定”,在实践中使用其他值不会产生负面影响。
好吧,如果你这样想:
1 字节为 8 位
1 kb = 1024 字节
1 MB = 1024 KB
1 GB = 1024 MB
... 等等 ...
这不仅仅是2^n
。计算中的内存与数字八密切相关——数字在大多数现代计算机中定义了一个字节。
位组合在一起的主要原因是为了表示字符。由于所有事物计算的二进制性质,理想的“块”位是 2 的幂,即1, 2, 4, 8, 16, 32...
。(基本上是因为它们总是可以分成更小的相等的包(它还创建了存储大小的快捷方式,但这是另一回事))。显然 4 位(在某些圈子中是 nybble)可以给我们 2^4 或 16 个唯一字符。由于大多数字母都比这个大,所以 2^8(或 256 个字符)是更合适的选择。
存在使用其他长度字节(特别是 7 或 9)的机器。这并没有真正幸存下来,主要是因为它们不那么容易操纵。您当然不能将奇数分成两半,这意味着如果要分割字节,则必须跟踪位串的长度。
最后,8 也是一个方便的数字,许多人(心理学家等)声称,人类的大脑通常只能立即回忆起 7-8 件事(不玩记忆技巧)。
如果它不接受该值,请检查您是否在金额后放置了megabytes
(M或m)或gigabytes
(G或g)修饰符。
例子:java -Xms500M -Xmx500M -jar myJavaProgram.jar
另外,看看这个链接。
为什么我们还以这种模式升级 RAM。
那是因为内存芯片/卡/的大小是 2 字节的幂。其根本原因是它使电子设备更简单。更简单意味着更便宜、更可靠和(可能)更快。
除了非书面约定外,它还具有性能影响 - 取决于机器的架构。
例如,如果一台机器是基于三进制的,那么将堆大小设置为 3 的幂会更好。