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

Is metaspace allocated out of native memory?

在Java8中,metaspace是从native memory中分配出来的,但是我在网上没弄明白什么是native memory?根据这个 link it is the memory available to the OS but at Difference between Metaspace and Native Memory in Java ,本机内存也显示为分配给 JVM 进程的内存的一部分

示例:- 如果是,请考虑我在 windows OS 上有 15 GB 内存的情况。我在 -Xmx 4GB 的机器上只有一个进程(Java 进程)运行。

这是否意味着 OS 最多可以使用 (15-4)=11 GB,其中将分配元 space 内存?

Is metaspace allocated out of native memory?

是的。

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

But i did not get anywhere on net what is native memory ?

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

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

If yes consider the case where i have 15 GB ram on windows OS. I have just one process (Java process) running on machine with -Xmx 4GB. Does it mean OS can use up to (15-4)=11 GB out of which meta space memory will be allocated?

也许:

  • Windows 机器上会有其他进程。其中很多。只不过是系统进程罢了。

  • 可能 OS 对允许 Java 进程增长的大小进行了强制限制。 (我假设 Windows 在 UNIX / Linux 系统上有一些东西可以填补 ulimit 的角色。)

  • 如果有磁盘 space 可用于分页,OS 实际分配给 Java 进程的内存可能多于可用的物理内存页。

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