【问题标题】:What's the Metaspace size in jvm8?jvm8 中的元空间大小是多少?
【发布时间】:2016-05-03 08:54:54
【问题描述】:

根据元空间的描述,它只使用本机内存(不分页)。

由于类元数据是从本机内存中分配的,因此最大可用空间是可用的系统总内存。

我在网上找到了以上两种解释。 我有一个问题。

  1. 所谓的本机内存位于jvm进程中?本机内存大小 = java 进程内存大小 - 堆大小,对吧?如果是这样,为什么他们说最大可用空间是总可用系统内存,因为 32 位 java 进程的最大大小仅限于 2G 左右?

【问题讨论】:

标签: java garbage-collection jvm


【解决方案1】:

它只使用本机内存(无分页)。

可以根据需要交换此内存。

所谓的本机内存位于jvm进程中?

本机内存在 JVM 进程中。

本机内存大小=java进程内存大小-堆大小,对吧?

本机内存是本机代码可以看到的所有内存。您可能想要排除堆。

如果是这样,为什么他们说最大可用空间是总可用系统内存

如果您没有操作系统或架构限制,例如

32位java进程的最大大小仅限于2G左右?

最大为 4 GB,但在不同的操作系统上,操作系统会使用部分虚拟内存。在 Windows XP 上,您只有 1.2 - 1.5 GB。在某些 UNIX 上,32 位进程可以使用 3.0 - 3.5 GB

【讨论】:

  • 实际上,在最近的 32Bit Windows 版本上,可用用户空间为 3GB,但该内存与代码共享,并且本机库和某些库的内存要求必须低于 2GB 障碍,而Oracle 的 JVM 有一个限制,即堆需要连续的内存。这就是为什么堆最终最多有 ~1.5GB(使用更多本机库时会更少),而在 Windows 上将用户空间限制为 2GB,最终最大堆大约为 1.1GB 到 1.2GB(此外,使用更多本机库时更少)。
  • @Holger 我的理解是 32 位 Windows 应用程序必须在 Windows XP 虚拟环境中运行,为了兼容性,即使在 Windows 10 中也是如此。
  • 我没有看到任何矛盾。甚至 Windows XP 也支持 3GB 的用户进程(可能仅限 SP3),但它必须在启动配置中激活。 AFAIK,从 Vista 开始,默认情况下支持。但是可执行文件(和库)必须设置一个特殊的位来声明它们可以处理具有最高位设置的用户地址。 JVM 有这一点,但如前所述,并非所有库都有。所以 JVM 和一些库的加载超过了 2GB 的障碍,但一些本机库仍然低于,这就是为什么没有完整的 2GB 可用于堆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多