【问题标题】:Is metaspace allocated out of native memory?元空间是否从本机内存中分配?
【发布时间】:2017-03-07 14:27:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: java memory-management operating-system metaspace


    【解决方案1】:

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

    是的。

    确定来源: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 具有在 UNIX/Linux 系统上充当ulimit 角色的功能。)

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

    【讨论】:

    • 当我说OS can use up to (15-4)=11 GB out of which meta space memory will be allocated 时,我的意思是操作系统可以在需要时使用多达 11 GB,就像系统进程一样(如你所说)。所以我们可以说 11 GB 或更少的内存可以归类为本地内存,其中也将分配元空间?
    • 没有。如果操作系统已将其分配给 Java 进程,则它只是“本机内存”。如果不是,最好将其描述为“空闲内存”......或“分配给其他用途的内存”。此外,正确的术语是“本机堆”而不是“本机内存”。
    • Ok get ot 但是在我的例子中,我在 Windows 操作系统上有 15 GB 内存。我只有一个进程(Java 进程)在 -Xmx 4GB 的机器上运行。` 默认情况下,操作系统将分配多少本机内存(或本机堆)给 java 进程?如果初始分配已满,操作系统是否会从空闲内存中分配额外的本机堆?
    • 本机堆大小按需增长。它的行为类似于 C/C++ malloc 堆。但在这一点上,我只是在重复我在回答中所说或暗示的内容。
    【解决方案2】:

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

    【讨论】:

    • Native memory is the normal memory of an application 我相信这意味着本机内存是可用的 RAM 内存。对吧?
    • @scottmiles 本机内存可以包括可用的虚拟内存,它可以超过 RAM。
    猜你喜欢
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多