GetByteArrayElements使用直接内存?

时间:2012-08-31 19:14:52

标签: java java-native-interface out-of-memory directmemory

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

程序在java中使用ByteBuffer.allocateDirect(),而C ++端将数据写入该缓冲区。 但是当我尝试将ByteBuffer.allocateDirect()更改为ByteBuffer.allocate()并使用GetByteArrayElements()来编写数据时。我仍然有相同的直接内存OOM。

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

非常感谢。

1 个答案:

答案 0 :(得分:2)

AFAIK GetByteArrayElements用于访问byte[],它支持堆ByteBuffer.allocate()。

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

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