我正在开发一个需要与C应用程序通信的Java应用程序.C应用程序使用共享内存和mmap进行通信,我需要Java应用程序才能访问相同的内存.
我的第一次尝试涉及使用JNI调用从共享内存中检索数据,但每次JNI调用的开销都会导致性能下降,因此我想要一种方法来获取Java中的内存并在Java端进行数据检索.
我的想法是我需要做以下事情:
这是最好的方法吗?另外,我不确定如何实际创建FileChannel以指向正确的内存位置.
Ste*_*eed 11
考虑使用ByteBuffer.allocateDirect.显然,这些缓冲区可以通过JNI层传递给可以直接访问内存的本机代码.
有关提示,请参阅此页面(如下所述).
现在,不仅可以JNI代码发现本机内存空间的地址与Java侧ByteBuffer.allocateDirect()创建的缓冲区内,但它可以分配自己的内存(使用malloc(),例如),然后调用返回JVM以将该内存空间包装在新的ByteBuffer对象中(执行此操作的JNI方法是NewDirectByteBuffer()).
| 归档时间: |
|
| 查看次数: |
7361 次 |
| 最近记录: |