Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java C++;没有JNI_Java_C++_Ipc - Fatal编程技术网

Java C++;没有JNI

Java C++;没有JNI,java,c++,ipc,Java,C++,Ipc,我的应用程序是用Java编写的。 有一个C++库我需要利用。我不想使用JNI 秒60次,C++应用程序需要发送java app 10MB数据;java应用程序需要发送C++应用程序10 MB的数据。 两个应用程序都在同一台机器上运行;操作系统是Linux或Mac OS X 最有效的方法是什么?(目前,我在考虑TCPIP端口;但是在C++中,我可以做内存映射——我能在java中做类似的事情吗?) 谢谢 听起来共享内存将是一条出路。我相信NIO库支持这一点 问题是您希望您的程序做什么?是的,Java

我的应用程序是用Java编写的。 有一个C++库我需要利用。我不想使用JNI

秒60次,C++应用程序需要发送java app 10MB数据;java应用程序需要发送C++应用程序10 MB的数据。 两个应用程序都在同一台机器上运行;操作系统是Linux或Mac OS X

最有效的方法是什么?(目前,我在考虑TCPIP端口;但是在C++中,我可以做内存映射——我能在java中做类似的事情吗?)
谢谢

听起来共享内存将是一条出路。我相信NIO库支持这一点


问题是您希望您的程序做什么?

是的,Java有使用NIO框架的内存映射文件


如果你试图避免JNI因为你不想写存根,你也可以使用C++代码(至少是代码< Extn)C“< /代码>”来使用。为了获得最佳性能,请使用直接映射(带有

本机
方法的具体类,而不是映射接口)--有关更多详细信息,请参阅文档。:-)

< P>不直接帮助,至少有趣的是开发,但是你可以把一个SSD/RAM驱动器引入java和C++应用程序中,在数据锁和文件锁之间有一种杂耍。
从性能角度来看,使此方案具有可管理性的是,为此,Java NIO提供了磁盘上低级字节映射的高级表示。

使用映射文件是手动滚动高度优化的rpc的一种方法。您可以考虑从Web服务开始,通过本地套接字,使用MTOM附加数据,或者将其丢弃到文件中。然后你可以测量性能。如果数据有问题,那么可以使用映射

请注意,在这方面有一些奇怪的限制,使您的代码对是否在Windows上运行敏感。在Windows上,无法删除打开的内容

我应该指出,我所做的正是你在这里提出的建议。它在套接字上有一个控制通道,数据通过一个文件被共享,该文件在C++中被映射(或Windows等效)和java中的NIO映射。它起作用了。不过,我从未测量过最大吞吐量。

您应该看看(和)


这是JNA最近支持C++的一个替代方案,特别关注性能。

< P>您应该看看JavoLo除器。 他们正在使用NIO直接缓冲区进行数据交换。 理论上,这应该比普通JNI更快 因为你没有传球的开销
参数列表中的数据。

您所说的是每秒1.2GB的数据传输。。。你确定这里有你的号码吗?这几乎相当于服务器内存带宽所能维持的一小部分。是的,这是一个与图形渲染引擎对话的物理模拟器。数字没有关闭。数字可能没有“关闭”,但我认为@skaffman所说的是,这样的数据传输速率可能无法实现,甚至在物理上不可能。。。考虑到机器上除了数据传输之外必须发生的所有其他事情。看看JNA JNA只是JNI上的一个包装器。是的——我刚刚编辑了我的问题,说如果OP因为需要避免写入存根而想要避免JNI,那么JNA是一个很好的选择(因为它为您处理存根).我想避免JNI以避免不稳定。我不相信C++库没有bug,也不想破坏java java的VM。所以,使用java NIO,C++和Java NIO内存映射同一个文件,然后通过这个文件进行通信?通过一些外部源(如TCP/IP)进行锁定?