Reputation: 1
I got a Direct Memory OOM in my program.
The program used ByteBuffer.allocateDirect()
in java, and C++ side writes data into that buffer.
But when I tried to change the ByteBuffer.allocateDirect()
to ByteBuffer.allocate()
and using GetByteArrayElements()
to write the data. I still got the same Direct Memory OOM.
I'm confused, is that GetByteArrayElements()
copys the array using direct memory?
Thanks so much.
Upvotes: 0
Views: 1085
Reputation: 533660
AFAIK GetByteArrayElements is for accessing a byte[]
which is what backs a heap ByteBuffer.allocate().
To access a direct ByteBuffer you need to use GetDirectBufferAddress and GetDirectBufferCapacity
http://download.java.net/jdk8/docs/technotes/guides/jni/jni-14.html
Upvotes: 3