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