【问题标题】:Why are JVM memory parameters usually in multiples of 256?为什么JVM内存参数一般都是256的倍数?
【发布时间】:2014-10-05 08:46:12
【问题描述】:

我见过几乎所有的 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,但我还没有看到太多具体的理由支持十进制或二进制值。

【问题讨论】:

  • JIT 使您的变量正确对齐,所以我认为这并不重要。
  • @Pat 这无关紧要,即使您以 2 的倍数给出 1MB(考虑到字节 1024 * 1024)

标签: java memory-management jvm-arguments


【解决方案1】:

JVM 内存参数不必使用 2 的倍数。如果旧的不够用,内存分配的常用方法是使值加倍。

如果您以 1MB 的步长增加分配的内存值,您将不得不调整该值数(百)次,才能使配置符合您的要求。因此,将旧值翻倍会更舒服。

这依赖于内存在当时是一种廉价资源这一事实。

编辑:

正如您已经提到的,可以分配 1000 MB 或 381 MB 之类的值。 JVM 可以处理任何大到足以容纳 permGenSpace、堆栈和堆的内存大小。

【讨论】:

  • 谢谢。是的,JMV CAN 处理每个内存大小,但我的问题是,如果我使用未四舍五入为 2 的倍数的值,它会浪费任何内存吗?我想这更像是一个最佳实践问题。它是否在规范或实现中的任何地方说明了 JVM 如何管理内存(指向此信息的一些链接会很好)?
  • 由于内存参数只影响JVM分配的最小和最大内存,并不影响实际分配的内存。这意味着 JVM 正在分配一个介于 min 和 max 之间的值,但这取决于 JVM 从操作系统分配多少内存。如果我们看一下 taskmanager 或 resourcemonitor,我们会发现分配的内存总是 2 KB 的倍数。例如 1,345,488 KB,即 1,313.95 MB。所以最小分配块大小必须是 2 或 4 KB。
【解决方案2】:

没关系。舍入值没有特殊处理。

您可以在 1 字节精度内指定内存大小 - JVM 本身会将大小四舍五入到它认为合适的值。例如。堆大小四舍五入到 2 MB 边界。看我的另一个答案:https://stackoverflow.com/a/24228242/3448419

【讨论】:

  • 感谢您的回答。因此,这意味着如果您指定的内存不是 2 的倍数,例如 123 MB,那么它将获得rounded 到最近的 2 MB 边界 - 在这种情况下为 122 MB。从本质上讲,四舍五入的 1 MB 被浪费了——对吗?同样,我看到您发布的链接是针对 OpenJDK 的,所以您知道它是规范的一部分还是留给实现来决定这些细节?
  • @Pat 堆大小通常向上取整,即 123 -> 124 MB。无论如何,这是特定于实现的。
【解决方案3】:

实际上并没有要求这些值是 2 的乘数。这只是一种使用方式。您可以在那里使用任何值。

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

【讨论】:

  • 谢谢。我知道,我们可以使用十进制值。但是,您是否有任何内存分析结果或比较表明它是否重要?
【解决方案4】:

我觉得主要是一种思路,比如:我有1GB内存,给JVM一半,也就是512MB。

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 1970-01-01
      • 2012-04-01
      • 2015-03-05
      • 2010-12-25
      • 2022-01-04
      • 2017-05-22
      • 2011-04-25
      • 1970-01-01
      相关资源
      最近更新 更多