Java JNI本机函数内的自定义内存分配

Java JNI本机函数内的自定义内存分配,java,c,memory-management,java-native-interface,Java,C,Memory Management,Java Native Interface,我需要在JNIC函数中分配字节数组。然后将该数组作为字节[]对象传输到Java代码中。我知道有一个函数NewByteArray,但它只接受字节数组的大小作为输入,所以我不能使用自定义内存分配函数。在我的例子中,我需要使用Linux中非常特定的非标准malloc类分配函数。由于资源非常有限,不应进行额外的复制。您不能这样做。通过JNI发送到Java的数据必须来自Java内存池。您不能从其他任何地方分配它,因为它将被视为java对象,这意味着java GC将根据需要移动它并删除它 您必须使用NewB

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

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


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

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


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

如果使用
字节[]
,则必须从Java堆中分配它,并允许它控制内存管理


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

如果使用
字节[]
,则必须从Java堆中分配它,并允许它控制内存管理

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