0

我的程序中有一个 Direct Memory OOM。

java中使用的程序ByteBuffer.allocateDirect(),C++端将数据写入该缓冲区。但是当我试图改变ByteBuffer.allocateDirect()toByteBuffer.allocate()和 usingGetByteArrayElements()来写入数据时。我仍然得到相同的直接内存OOM。

我很困惑,这是GetByteArrayElements()使用直接内存复制数组吗?

非常感谢。

4

1 回答 1

3

AFAIK GetByteArrayElements 用于访问byte[]支持堆 ByteBuffer.allocate() 的对象。

要访问直接 ByteBuffer,您需要使用 GetDirectBufferAddress 和 GetDirectBufferCapacity

http://download.java.net/jdk8/docs/technotes/guides/jni/jni-14.html

于 2012-08-31T19:25:44.347 回答