在Java 8中,元空间是从本机内存中分配的,但我没有在网上获得什么是本机内存?根据此link,它是操作系统可用的内存,但在Difference between Metaspace and Native Memory in Java,本机内存也显示为JVM进程的内存的一部分
示例: -
如果是,请考虑我在Windows操作系统上有15 GB RAM的情况。我只有一个进程(Java进程)在-Xmx 4GB
的机器上运行。
这是否意味着操作系统最多可以使用(15-4)=11 GB
,其中将分配元空间内存?
答案 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"