我正在使用 JavaCPP 在 Java 应用程序中利用一些 C++ 库,但操作的数据是大数据。所以我的代码工作正常,但对内存不友好(我需要它快速工作):
- 我有很多东西
byte[][]
要提供给原生部分。 - 目标本机函数类似于
nativeFunction(PointerPointer param)
-> Doc - (准确地说,这是一种
PointerPointer<BytePointer>
预期的类型,因此BytePointer
asbyte[][]
的列表是 的列表byte[]
)-> Doc
我以这种方式初始化预期的参数:
byte[][] myBigDatas;
// myBigDatas.length = 4
// myBigDatas[x].length = something like 4000000
// Initialize param
PointerPointer<BytePointer> srcParam = new PointerPointer<BytePointer>(
myBigDatas[0],
myBigDatas[1],
myBigDatas[2],
myBigDatas[3]);
// Call the native function
nativeFunction(srcParam);
问题是,参考文档,对于通过使用提供的数据BytePointer
调用创建的每个PointerPointer<BytePointer>(...)
,它不是内存包装,而是制作的副本。
有没有办法避免复制?
编辑:
byte[][]
否则,JNI 是否提供无需复制即可提供和返回的解决方案?(我知道这是一个简单的byte[]
)