1

私は JavaCPP を使用して Java アプリケーションでいくつかの C++ ライブラリを利用していますが、操作されたデータはビッグ データです。したがって、私のコードは正常に動作しますが、メモリに優しくありません (高速に動作させる必要があります)。

  • byte[][]私はネイティブの部分に提供する大きなものを持っています。
  • ターゲットのネイティブ関数は次のようなものですnativeFunction(PointerPointer param)-> Doc
  • (正確には、これはPointerPointer<BytePointer>期待される型なので、BytePointerasbyte[][]のリストは のリストです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[]

4

1 に答える 1