为什么JVM内存参数通常是256的倍数?

时间:2014-08-12 10:08:46

标签: java memory-management jvm-arguments

我已经看到几乎所有的JVM内存参数通常是256的倍数或round二进制值 - 例如256m,512m,1024m等我知道,它可能与物理内存(RAM)通常是二进制数,如256 MB,1 GB等有关。

我的问题是,如果将JVM内存设置为256的倍数或任何二进制值,它是否真的有助于内存管理?将JVM内存保持为十进制十进制值(例如1000m而非1024m)是否有害 - 尽管我从未见过任何JVM使用的这样的值在十进制方面被视为round

操作系统会在启动时将所提到的内存分配给JVM,所以我想,对于JVM来说,它是否可以有效地管理圆形十进制内存大小(例如1000 MB)或者是否有任何内容更是一个问题缺点。

编辑:我知道,我们CAN使用JVM内存的十进制值,但我的问题是SHOULD我们使用十进制值?

EDIT2:关于JVM同样有效处理每个内存大小的意见/猜测,请分享您用于得出结论的任何相关链接。我在其他开发人员中已经看到了关于这个主题的WAR,但我还没有看到很多具体的理由支持 - 十进制或二进制值。

5 个答案:

答案 0 :(得分:8)

没有必要使用2的倍数作为JVM内存参数。如果旧的值不够,那么内存分配通常会将值加倍。

如果以1MB为步长增加分配的内存值,则必须在配置符合要求之前将值调整几(100)次。因此,将旧价值翻倍会更加舒适。

这取决于当时记忆是一种廉价的资源。

编辑:

正如您已经提到的,可以分配1000 MB或381 MB等值。 JVM可以处理足够大的内存大小来托管permGenSpace,堆栈和堆。

答案 1 :(得分:2)

没关系。圆形值没有特殊处理。

您可以在1字节精度内指定内存大小 - JVM本身会将大小调整到适合的值。例如。堆大小舍入到2 MB边界。请参阅我的其他答案:https://stackoverflow.com/a/24228242/3448419

答案 2 :(得分:1)

没有真正要求这些值是2的乘数。它只是一种使用方式。你可以使用那里有价值的东西。

-Xms1303m -Xmx2303m -XX:MaxPermSize=256m // my configs

答案 3 :(得分:1)

我认为它主要是一种思维方式,例如:我有1 GB内存,我会给JVM一半,即512 MB。

答案 4 :(得分:0)

这只是一种确保您指定的大小(作为参数)适合实际分配的内存的方法,因为机器以大小为2的块分配内存。