2012年8月13日月曜日

JNIでヒープ外を参照


JNIを使ってヒープ外のメモリにアクセスしていたわけで。そしたら、実装方法により性能が全然違ったのでメモ。



ByteBufferでアクセス

ByteBufferクラスを使ってアクセスするのが最高性能が出ました。以下に実装例を記載。
Java
C++(MSVC)

byte[]でアクセス

ByteBufferより倍の性能かかった実装例で、byte[]を引き渡す方式。C側でJavaの配列操作をするのに時間がかかるようです。
Java
C++(MSVC)



1 byteずつアクセス

最初はbyte数分、Java側でループを行って1byteずつ参照する方式。JNIのオーバヘッドが大きいようで、ByteBufferクラスに比べ100倍以上の時間がかかっていた。
Java
C++(MSVC)

0 件のコメント: