在 Java 8 中,元空间是从本机内存中分配的,但我没有在网上找到任何地方什么是本机内存?根据此链接,它是操作系统可用的内存,但在 Java 中 Metaspace 和 Native Memory 之间的差异中,本机内存也显示为分配给 JVM 进程的内存的一部分
示例:-
如果是,请考虑我在 Windows 操作系统上有 15 GB 内存的情况。我只有一个进程(Java 进程)在-Xmx 4GB
.
这是否意味着操作系统最多可以使用(15-4)=11 GB
将分配的元空间内存?
在 Java 8 中,元空间是从本机内存中分配的,但我没有在网上找到任何地方什么是本机内存?根据此链接,它是操作系统可用的内存,但在 Java 中 Metaspace 和 Native Memory 之间的差异中,本机内存也显示为分配给 JVM 进程的内存的一部分
示例:-
如果是,请考虑我在 Windows 操作系统上有 15 GB 内存的情况。我只有一个进程(Java 进程)在-Xmx 4GB
.
这是否意味着操作系统最多可以使用(15-4)=11 GB
将分配的元空间内存?
元空间是否从本机内存中分配?
是的。
权威来源: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 进程分配比物理内存页面更多的内存。
本机内存是应用程序的正常内存。这与由 JVM 管理的堆内存相对。例如,在 C 程序中,它会被称为“内存”