我需要在JNI C函数中分配字节数组。然后将此数组作为byte[]
对象传输到Java代码中。我知道有一个函数NewByteArray
,但它只是输入字节数组的大小,所以我不能使用自定义内存分配函数。在我的情况下,我需要使用Linux中非常具体的非标准malloc类分配函数。由于资源非常有限,不应该进行额外的复制。
答案 0 :(得分:2)
你不能这样做。通过JNI发送到Java的数据必须来自Java内存池。您无法从其他任何地方分配它,因为它将被视为java对象,这意味着Java GC将移动它并根据需要将其删除。
你必须使用NewByteArray,然后你可以从你想要的任何C指针初始化数组,以你想要的任何方式分配。但它必须将这些值复制过来。
答案 1 :(得分:2)
如果使用byte[]
,则必须从Java堆中分配它并允许它控制内存管理。
但是,您可以使用ByteBuffer
,它允许您在本机代码中执行内存管理。您可以在本机代码中分配一块内存,并从Java访问它而无需复制。