John Yu
John Yu

Reputation: 1

GetByteArrayElements uses direct memory?

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

Answers (1)

Peter Lawrey
Peter Lawrey

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

Related Questions