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