我已经看到几乎所有的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
,但我还没有看到很多具体的理由支持 - 十进制或二进制值。
答案 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的块分配内存。