JNI依赖于平台



我用Java和JNI为Linux编写简单的"Hello World"程序,如果我适合使用JNI,则必须为每个平台编译共享库(例如Linux的*.so,Windows的*.dll等)将其放在*.jar文件附近的某个位置,并编写一个脚本来正确执行它(例如.java jar -Djava.library.path=. your_app.jar)。这让我有点难过,因为我选择 Java 是因为平台的相互依赖性。当然,用Windows和Mac构建一个完全相同的库并不是什么大问题,但是我第一次想到JNI就像一个银弹,它将Java的平台独立性和C的速度结合在一个.jar文件中。

也许我假设有些错误,并且有办法做到这一点?

Java 基本上是独立于平台的,JNI 是一个很大的例外......

JNI = Java Native Interface。本机 = 依赖于平台。JNI是Java中可选且非常专业的一部分,您不会被迫将其用于任何Java编码。JNI旨在用于在JVM中绝对无法完成的孤立任务。不是出于速度原因,而是为了访问本机(操作系统级别)资源/接口或第三方本机(非 JVM)单片库。使用JNI以获得"更好的速度",并且实际上期望差异很大,这表明您可能应该完全使用不同的工具。

您实际上必须为目标的每个平台提供不同版本的本机库。所以,是的,在某种程度上,在使用 JNI 时,您将失去平台可移植性。

虽然我不知道您的确切问题,但出于性能原因,我会评估本机代码是否真的重要。在我看来,Java并不像有时讨论的那样慢。

最新更新