2

在 Java 8 中,元空间是从本机内存中分配的,但我没有在网上找到任何地方什么是本机内存?根据此链接,它是操作系统可用的内存,但在 Java 中 Metaspace 和 Native Memory 之间的差异中,本机内存也显示为分配给 JVM 进程的内存的一部分

示例:- 如果是,请考虑我在 Windows 操作系统上有 15 GB 内存的情况。我只有一个进程(Java 进程)在-Xmx 4GB.

这是否意味着操作系统最多可以使用(15-4)=11 GB将分配的元空间内存?

4

2 回答 2

2

元空间是否从本机内存中分配?

是的。

权威来源:https ://blogs.oracle.com/poonam/entry/about_g1_garbage_collector_permanent

但是我没有在网上找到任何地方什么是本机内存?

本机堆是 malloc / 空闲堆,它为 JVM 中以本机代码 (C++) 实现的那些部分提供动态内存。JVM 加载的用户提供的本机库也可以使用它。本机堆本身不是垃圾收集,但元空间是。

使用本机堆来保存元空间对象的一个​​好处是本机堆不像 Java 堆那样具有固定的最大大小(默认情况下)。

如果是,请考虑我在 Windows 操作系统上有 15 GB 内存的情况。我只有一个进程(Java 进程)在 -Xmx 4GB 的机器上运行。这是否意味着操作系统可以使用最多 (15-4)=11 GB 的元空间内存?

也许:

  • Windows机器上会有其他进程。其中很多。只是它们是系统进程。

  • 对于允许 Java 进程增长的大小,可能存在操作系统强制限制。(我假设 Windows 具有ulimit在 UNIX/Linux 系统上扮演的角色。)

  • 如果有可用于分页的磁盘空间,操作系统实际上可能会为 Java 进程分配比物理内存页面更多的内存。

于 2016-10-25T14:02:27.373 回答
1

本机内存是应用程序的正常内存。这与由 JVM 管理的堆内存相对。例如,在 C 程序中,它会被称为“内存”

于 2016-10-25T14:02:39.397 回答