如何处理JavaCPP避免数据复制? 我使用Javapp开发java应用程序中的C++库,但操作数据是大数据。因此,我的代码工作正常,但内存不友好(我需要它快速工作): 我有一个大的字节[][]要提供给本机部分 目标本机函数类似于nativeFunction(PointerPointer参数)-> (准确地说,这是预期的指针指针类型,因此BytePointer作为byte[][]的列表是byte[]的列表)->
我通过以下方式初始化预期参数:如何处理JavaCPP避免数据复制? 我使用Javapp开发java应用程序中的C++库,但操作数据是大数据。因此,我的代码工作正常,但内存不友好(我需要它快速工作): 我有一个大的字节[][]要提供给本机部分 目标本机函数类似于nativeFunction(PointerPointer参数)-> (准确地说,这是预期的指针指针类型,因此BytePointer作为byte[][]的列表是byte[]的列表)->,java,android,memory,java-native-interface,javacpp,Java,Android,Memory,Java Native Interface,Javacpp,我通过以下方式初始化预期参数: byte[][] myBigDatas; // myBigDatas.length = 4 // myBigDatas[x].length = something like 4000000 // Initialize param PointerPointer<BytePointer> srcParam = new PointerPointer<BytePointer>( myBigDatas[0], myBigDatas[
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);
byte[]myBigDatas;
//myBigDatas.length=4
//myBigDatas[x].length=4000000左右
//初始化参数
指针指针srcParam=新指针指针(
myBigDatas[0],
myBigDatas[1],
myBigDatas[2],
myBigDatas[3]);
//调用本机函数
nativeFunction(srcParam);
参考文档,问题在于,对于调用PointerPointer(…)
创建的每个BytePointer
以及提供的数据,它不是内存包装,而是复制
有没有办法避免抄袭
编辑:
否则,JNI是否为给定和返回
字节[][]
提供解决方案,而不复制它?(我知道这是一个简单的字节[]
)我找到了一个解决方案,只想与大家分享。我用一个字节[][]
替换了我的字节[][]
(一个直接的字节[]
数组)。那么,做什么?
BytePointer bp = new BytePointer(/*direct ByteBuffer*/)
不会复制的!性能增益是巨大的 我找到了一个解决方案,只想与大家分享。我用一个
字节[][]
替换了我的字节[][]
(一个直接的字节[]
数组)。那么,做什么?
BytePointer bp = new BytePointer(/*direct ByteBuffer*/)
不会复制的!性能增益是巨大的 如果内存和执行时间非常关键,本机无法避免,我会将更多代码转移到本机端…@Fildor是对的。我建议在C++中使用Byth[]来代替java。@你们两个当然是对的,但不幸的是,我现在不能。如果内存和执行时间很关键,本地不能避免,我会把更多的代码移到本机的边…@ Fieldor是正确的。我建议用C++代替java来读取字节[]。你们两个当然是对的,但不幸的是,我现在不能。