我如何知道我的Java应用程序是否使用"本机代码"?

Han*_*etz 7 java java-native-interface

最近的一个问题上,我得到了一些评论,询问我是否在我的应用程序中使用"本机代码".现在,我知道有一些方法可以使用名为"JNI"的东西从Java应用程序内部调用传统二进制库(DLL,SO)中的代码.我已经阅读了维基百科条目,但我从未使用过这个.

我使用了许多库,其中一些可能使用也可能不使用本机代码.我怎么知道他们是否这样做?我没有安装任何SO(在Linux上运行),但我想这并不意味着库没有使用任何?我是否必须浏览所有文档(库之间的质量差别很大)或者我可以对JAR进行一些分析吗?

Joa*_*uer 4

通常使用需要 JNI 的库需要一些额外的设置(例如将.dll文件.so放在正确的位置或设置java.library.path系统属性)。

如果您什么也没做,那么很可能您没有在任何地方使用 JNI。这也是有可能的,因为只有非常专业的库才需要 JNI。

然而,还有JNA,它是 JNI 的包装器,它简化了它的使用,有时不需要进行任何显式设置。如果您的库之一使用了它,那么就更难检测到。

如果您收到故障转储,则检查是否有任何非标准库可以提示用户加载的本机库是否是罪魁祸首。