首页 > 解决方案 > 为什么java 8中MaxMetaSpaceSize的默认值为18446744073709486080?

问题描述

我知道 MaxMetaspaceSize 默认是无限的,Windows x64 的最大内存大小2^64(18446744073709551616)以字节为单位,那么为什么不将 MaxMetaspaceSize 设置为,2^64而是将其设置为18446744073709486080等于:2^64-2^16

标签: javajvm

解决方案


HotSpot JVM 中的“ulimited”大小由适合 64 位整数变量的最大值表示,即 2 64 -1。

MaxMetaSpaceSize然后进一步对齐(向下舍入)到最小元空间分配单元

  // Ideally, we would be able to set the default value of MaxMetaspaceSize in
  // globals.hpp to the aligned value, but this is not possible, since the
  // alignment depends on other flags being parsed.
  MaxMetaspaceSize = align_size_down_bounded(MaxMetaspaceSize, _reserve_alignment);

在 Windows 上等于 64K (2 16 )。


推荐阅读