【发布时间】:2011-09-14 08:15:29
【问题描述】:
在recent question 上,我让 cmets 询问我是否在我的应用程序中使用“本机代码”。现在,我知道有一些方法可以使用 a thing called "JNI" 从 Java 应用程序内部调用传统二进制库(DLL、SO)中的代码。我已经阅读了那个 Wikipedia 条目,但我从未使用过它。
我正在使用许多库,其中一些可能使用或不使用本机代码。我如何知道他们是否这样做?我不必安装任何 SO(在 Linux 上运行),但我想这并不意味着这些库没有使用任何 SO?我是否必须浏览所有文档(库之间的质量差异很大)或者我可以对 JAR 进行一些分析?
【问题讨论】:
-
许多使用操作系统的函数,比如 IO,线程都在某处使用本地方法。编写一个从不使用本机调用的有用程序是不可能的(无论你是否知道)
-
您可以获取 linux 中已加载库的列表,例如:
cat /proc/processId/maps | grep ".so"在 Windows 进程资源管理器上可以显示加载的 DLL,最后,您可以安装 SecurityManager(在 java 中)来跟踪任何正在加载的库,方法称为checkLink,权限名称以“loadLibrary”开头
标签: java java-native-interface