java - 使用 Java Runtime 和 Process 类执行 C 代码与使用 native 接口(interface)

标签 java c java-native-interface

我正在考虑使用 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/

相关文章:

java - 设置 Java DNS 缓存 TTL

java - webdriver 单击网页中的链接

java - 配置 Hazelcast CPSubsystem 重试超时

c - 如何在TCP客户端中使用write函数验证ACK包?

android - undefined reference 错误,无法创建共享库

java - Android、OpenGL 将顶点值转换为像素

c - Doxygen 的页面跨多个评论 block

c - 如何在全局数组声明中声明 sysconf 返回值?

java - 从 C 代码设置/获取 Java List<>

Android gradle,不同架构的本地库