我正在考虑使用 C 语言为我的应用程序进行一些后端处理,至少是为了获得学习体验。
通常我会编写一个 C 程序作为独立的 shell 命令,然后使用 Process.exec
运行它并获取结果。
但是我想到了开销。每次需要调用这些 C 程序之一时,调用 shell 进程会产生多少开销?使用 JNI 来提高性能是否更好?
应用程序将托管在服务器上,并且必须处理大量并发请求,因此我的直觉是 JNI 是更有效的方法。但我对这个领域还不够了解,所以一些关于它如何影响性能的指导会很有帮助。
最佳答案
我建议从这里开始:
http://jnicookbook.owsiak.org/recipe-No-001/
您将会感受到如何处理 JNI。我从简单的事情开始,然后转向更复杂的主题 - 在处理 JNI 时您可能会遇到其中的大多数主题。
我建议从简单的 Hello World 开始 - 只是为了确保您有工作环境。
而且,说到性能。我建议进行以下测试。尝试将“Hello world”作为独立进程运行,然后通过 JNI 并比较结果:)
最好是运行更长时间;)
只是为了给你肮脏的、丑陋的、大胆的估计。假设您想打印“Hello world!”使用 JNI 与进程构建器 - 1000 次。
JNI: 4ms
Process: 3275ms
更新
如果你想进行一些测试,只需执行以下操作
git clone https://github.com/mkowsiak/jnicookbook.git
cd jnicookbook/recipes/recipeNo033
make
make test
享受 JNI 带来的乐趣!
关于java - 使用 Java Runtime 和 Process 类执行 C 代码与使用 native 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557345/