我的程序中有一个Direct Memory OOM。
程序在java中使用ByteBuffer.allocateDirect()
,而C ++端将数据写入该缓冲区。
但是当我尝试将ByteBuffer.allocateDirect()
更改为ByteBuffer.allocate()
并使用GetByteArrayElements()
来编写数据时。我仍然有相同的直接内存OOM。
我很困惑,是GetByteArrayElements()
使用直接内存复制数组吗?
非常感谢。
答案 0 :(得分:2)
AFAIK GetByteArrayElements用于访问byte[]
,它支持堆ByteBuffer.allocate()。
要访问直接的ByteBuffer,您需要使用GetDirectBufferAddress和 GetDirectBufferCapacity
http://download.java.net/jdk8/docs/technotes/guides/jni/jni-14.html