Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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本机通信性能_Java_Java Native Interface_Native_Swig_Jna - Fatal编程技术网

解释Java本机通信性能

解释Java本机通信性能,java,java-native-interface,native,swig,jna,Java,Java Native Interface,Native,Swig,Jna,现在我正在使用JNA进行Java本机通信,并对其简单性感到满意。但是,我确实需要优化性能,并且正在考虑使用其他绑定 我的问题是:Java本机通信的“昂贵”部分是什么?这是他们之间的数据传递吗 让我换一种说法。现在,我的JNA接口调用的函数根本不向Java传递任何数据,而且这些函数甚至不经常被调用。换句话说,Java调用一个库调用,然后库调用自己做一段时间,并返回一个基元类型。在这种情况下,JNI/Swig/etc会比JNA快吗?给定您的用例,JNI不会比JNA快 Java本机交互的代价是传输大量

现在我正在使用JNA进行Java本机通信,并对其简单性感到满意。但是,我确实需要优化性能,并且正在考虑使用其他绑定

我的问题是:Java本机通信的“昂贵”部分是什么?这是他们之间的数据传递吗


让我换一种说法。现在,我的JNA接口调用的函数根本不向Java传递任何数据,而且这些函数甚至不经常被调用。换句话说,Java调用一个库调用,然后库调用自己做一段时间,并返回一个基元类型。在这种情况下,JNI/Swig/etc会比JNA快吗?

给定您的用例,JNI不会比JNA快

Java本机交互的代价是传输大量内存。特别是,为本机代码提供Java内存可能非常昂贵;IIRC这部分是因为Java可以随心所欲地分割内存,但是本机代码需要连续的内存块——内存的移动/复制需要一些时间

如果您关心性能,那么应该确保JNA代码使用“直接”样式的访问,而不是原始接口样式的访问

另外,如果需要在java和本机代码之间传输大量内存,则应该考虑使用一个初始的直接分配(如果可能的话),并且避免定期重新分配内存。这样,您只需在开始时支付一次分配成本,因此在大量呼叫中,该成本可以忽略不计