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

时间:2016-10-25 13:42:15

标签: java memory-management operating-system metaspace

在Java 8中,元空间是从本机内存中分配的,但我没有在网上获得什么是本机内存?根据此link,它是操作系统可用的内存,但在Difference between Metaspace and Native Memory in Java,本机内存也显示为JVM进程的内存的一部分

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

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

2 个答案:

答案 0 :(得分:1)

  

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

明确来源:https://blogs.oracle.com/poonam/entry/about_g1_garbage_collector_permanent

  

但我没有在网上获得什么是本机内存?

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

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

  

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

也许:

  • Windows计算机上还有其他进程。其中很多。它只是系统过程。

  • 可能存在操作系统强制限制允许Java进程增长的程度。 (我假设Windows在UNIX / Linux系统上具有填充ulimit角色的功能。)

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

答案 1 :(得分:1)

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