7

我在设置堆大小时观察到人们更喜欢值 64,128,256,1024..。如果我在这些数字之间给出一个值(比如 500),JVM 不会接受这个值吗?为什么这些数字很重要和首选?为什么我们还要以这种模式升级 RAM?

请帮我理解。

4

5 回答 5

7

JVM 将接受任何值,这没有问题。使用 2^n 值只是一种“约定”,在实践中使用其他值不会产生负面影响。

于 2012-07-13T07:06:03.743 回答
2

好吧,如果你这样想:

  • 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 件事(不玩记忆技巧)。

于 2012-07-13T07:50:38.213 回答
0

如果它不接受该值,请检查您是否在金额后放置了megabytesMm)或gigabytesGg)修饰符。

例子:java -Xms500M -Xmx500M -jar myJavaProgram.jar

另外,看看这个链接

于 2012-07-13T07:09:18.693 回答
0

为什么我们还以这种模式升级 RAM。

那是因为内存芯片/卡/的大小是 2 字节的幂。其根本原因是它使电子设备更简单。更简单意味着更便宜、更可靠和(可能)更快。

于 2012-07-13T08:13:58.510 回答
0

除了非书面约定外,它还具有性能影响 - 取决于机器的架构。

例如,如果一台机器是基于三进制的,那么将堆大小设置为 3 的幂会更好。

于 2014-07-31T11:48:16.757 回答