【问题标题】:Custom memory allocation inside JNI native functionJNI 本机函数中的自定义内存分配
【发布时间】:2014-08-18 16:38:01
【问题描述】:

我需要在 JNI C 函数中分配字节数组。然后将此数组作为byte[] 对象传输到Java 代码中。我知道有一个函数NewByteArray,但它只将字节数组的大小作为输入,所以我不能使用自定义内存分配函数。就我而言,我需要使用 Linux 中非常具体的非标准类似 malloc 的分配函数。由于资源非常有限,不应该有额外的复制。

【问题讨论】:

    标签: java c memory-management java-native-interface


    【解决方案1】:

    如果您使用byte[],那么您必须从 Java 堆中分配它并允许它控制您的内存管理。

    但是,您可以使用ByteBuffer,它允许您在本机代码中执行内存管理。您可以在本机代码中分配一块内存并从 Java 访问它而无需复制。

    【讨论】:

      【解决方案2】:

      你不能那样做。通过 JNI 发送到 Java 的数据必须来自 Java 内存池。您不能从其他任何地方分配它,因为它将被视为 java 对象,这意味着 Java GC 将移动它并根据需要将其删除。

      您必须使用 NewByteArray,然后您可以从任何您想要的 C 指针初始化该数组,并以您想要的任何方式分配。但它必须将这些值复制过来。

      【讨论】:

        猜你喜欢
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-11
        • 2012-05-29
        • 2012-02-22
        • 1970-01-01
        • 2012-07-08
        相关资源
        最近更新 更多