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