Java堆大小:为什么使用2的幂?

fgy*_*ica 5 java heap heap-memory

在大多数情况下,当我看到有关使用-Xms-xmxJVM参数设置Java堆大小的示例时,人们会使用以下两种幂:

128m, 512m, 1024m, etc.
Run Code Online (Sandbox Code Playgroud)

真的有原因吗?这在某种程度上对JVM性能有好处吗?还是仅仅因为程序员倾向于喜欢2的幂而这样做?(或者因为默认值是64m?)

PS当然,我知道您可以使用任何想要的数字(-Xmx666)。但是人们倾向于使用2的幂。

Aar*_*lla 3

我不知道为什么其他人这样做,但对我来说,a)惯例以 2 的幂为单位给出 RAM 大小,因为内存模块使用它,并且 b)我知道内存中 2 的所有幂直到 65536,所以它是不需要额外的努力来做到这一点。

但从操作系统/内存的角度来看,使用 2 的幂来分配兆字节没有任何影响。如果我们讨论的是较小的大小(例如 511 或 512 字节),那么操作系统的内存管理子系统将对这些值进行舍入。但操作系统没有针对兆字节进行轮询。