java - JNI native 函数内的自定义内存分配

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

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

最佳答案

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

但是,您可以使用 ByteBuffer ,它允许您在 native 代码中执行内存管理。您可以在 native 代码中分配一 block 内存,并在没有副本的情况下从 Java 访问它。

关于java - JNI native 函数内的自定义内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368049/

相关文章:

java - 类型不匹配 : cannot convert from element type Object to Player

c - 向 pthread_create() 发送多个参数

android - 为什么Android在加载图像时分配的内存比需要的多

c++ - 链表节点的 RAII 风格 C++ 类

c - eiffel c编译失败: error LNK2001: unresolved external symbol

c++ - 为什么 std::shared_ptr 起作用?

java - PaintComponent() 的问题

java - 注释 ConcurrentHashMap 时处于 hibernate 状态的 "Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements"

java - 编译错误 : “Not a statement”

c - 在 C 中安全重启 linux