我的程序中有一个直接内存OOM。
程序使用java中的ByteBuffer.allocateDirect()
,C++端将数据写入该缓冲区。但是当我尝试将ByteBuffer.allocateDirect()
更改为ByteBuffer.allocate()
并使用GetByteArrayElements()
写入数据时。我仍然得到相同的直接内存OOM。
我很困惑,是不是GetByteArrayElements()
使用直接内存复制数组?
非常感谢。
发布于 2012-09-01 03:25:44
AFAIK GetByteArrayElements用于访问支持堆ByteBuffer.allocate()的byte[]
。
要访问直接ByteBuffer,您需要使用GetDirectBufferAddress和GetDirectBufferCapacity
http://download.java.net/jdk8/docs/technotes/guides/jni/jni-14.html
https://stackoverflow.com/questions/12221316
复制相似问题