私は 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 は Give AND return WITHOUT COPYING ITのソリューションを提供しますか? (私はそれが単純であることを知っていますbyte[]
)