【问题标题】:Java off heap memory and huge pagesJava 堆外内存和大页面
【发布时间】:2020-04-24 11:12:14
【问题描述】:

在 Java 中分配堆外内存时(例如通过直接缓冲区或 JNI 本机代码),如果 JVM 使用 -XX:+UseLargePages,分配的内存是否会由大页支持?

【问题讨论】:

    标签: java jvm huge-pages off-heap


    【解决方案1】:

    不,HotSpot JVM uses 一个普通的 libc malloc 调用来为直接 ByteBuffer 分配内存。

    但是,如果您将标准系统分配器替换为例如 jemalloc - 您将能够 configure malloc 在可用时使用大页面。

    将大页面用于直接 ByteBuffers 的另一种选择是在 hugetlbfs 文件系统上创建一个文件,然后在 Java 中将其映射为 MappedByteBuffer

    【讨论】:

    • 我猜想在扩展堆时使用 libhugetlbfs 来重载 malloc 行为是另一种选择吗?这个解决方案或 jemalloc 是否适用于通过 JNI 完成的 malloc 调用?
    • @user36568 对,libhugetlbfs 也应该完成这项工作。它适用于直接 ByteBuffers 和 JNI 代码中的其他 malloc 调用。
    猜你喜欢
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2021-09-26
    • 2010-09-21
    相关资源
    最近更新 更多