GetByteArrayElements использует прямую память?

Я получил OOM Direct Memory в моей программе.

Используемая программа ByteBuffer.allocateDirect() в Java, а сторона C++ записывает данные в этот буфер. Но когда я попытался изменить ByteBuffer.allocateDirect() в ByteBuffer.allocate() и используя GetByteArrayElements() написать данные. Я все еще получил тот же OOM Direct Memory.

Я в замешательстве, это GetByteArrayElements() копирует массив используя прямую память?

Спасибо.

1 ответ

AFAIK GetByteArrayElements предназначен для доступа к byte[] это то, что поддерживает кучу ByteBuffer.allocate().

Для доступа к прямому ByteBuffer вам нужно использовать GetDirectBufferAddress и GetDirectBufferCapacity

http://download.java.net/jdk8/docs/technotes/guides/jni/jni-14.html

Другие вопросы по тегам