Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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 使用JNI在内存和速度方面会受益吗?_Java_Assembly_Java Native Interface_Webserver_Nasm - Fatal编程技术网

Java 使用JNI在内存和速度方面会受益吗?

Java 使用JNI在内存和速度方面会受益吗?,java,assembly,java-native-interface,webserver,nasm,Java,Assembly,Java Native Interface,Webserver,Nasm,我正在用Java构建一个游戏服务器。网络将由JBOSS NETY处理,我认为如果我使用JNI调用C++函数,可以得到一点额外的性能和内存效率,这些函数只是汇编代码的包装器(用NASM组装),所以I/O操作将在装配中完成,同时处理大量的数据。这种方法有什么好处吗?< /P> < P> I/O函数是OS的瓶颈,程序集将强>不< /强>加速I/O。C++一般不切换到C++或切换到任何下级语言。 如果您想提高性能,请尝试避免I/O。这是个案基础。如果在I/O之间包含大量的计算/进程/内存访问,java的

我正在用Java构建一个游戏服务器。网络将由JBOSS NETY处理,我认为如果我使用JNI调用C++函数,可以得到一点额外的性能和内存效率,这些函数只是汇编代码的包装器(用NASM组装),所以I/O操作将在装配中完成,同时处理大量的数据。这种方法有什么好处吗?< /P> < P> I/O函数是OS的瓶颈,程序集将<>强>不< /强>加速I/O。C++一般不切换到C++或切换到任何下级语言。
如果您想提高性能,请尝试避免I/O。

这是个案基础。如果在I/O之间包含大量的计算/进程/内存访问,java的实现效率不如C++,那么肯定会有性能提升。在许多情况下,这是事实

但是,如果性能提高超过了调试特定进程的能力,请仔细考虑。如果问题发生在您的JNI调用中,则很难确定问题所在


通常,对于服务器来说,更重要的是能够判断问题所在并加以解决,而不是在提高性能方面走极端,因为服务器性能也可以通过附加硬件(更快的组件、群集等)轻松获得与客户端程序不同,客户端程序通常使用默认硬件。

好的,谢谢:)。但是JNI调用的本机代码通常会更快吗?是的,会有一点点。这不是因为I/O速度更快,而是因为变量的一般解析,以及类似的东西不会通过虚拟机,而是直接通过机器代码。尽管如此,差别还是很小的。不要过早优化,也不要低估JIT编译器的可能性。有可能的优化JIT编译器使用,其中一个C++编译器是无法使用的。因此,您是否真的能从调用本机代码中获益还不清楚。特别是当您必须经常跨越Java代码和本机代码之间的界限时。因此,总体观点是,这是一个“不可能的”?使用JNI的主要原因是当您需要使用专用的C/C++库时,或者为了非常特定的用途(如涉及3D矩阵的大量计算)。在这里,您将因假设的性能提高而失去简单性。还要提醒的是,Java->native方法调用与Java->Java调用相比有轻微的开销。