防止Java多次加载库
我有几个类使用相同的JNI库,称为“JNI”。在每个类中,我在类的静态初始值设定项中都有一个System.loadLibrary()调用:防止Java多次加载库,java,java-native-interface,Java,Java Native Interface,我有几个类使用相同的JNI库,称为“JNI”。在每个类中,我在类的静态初始值设定项中都有一个System.loadLibrary()调用: Class class1 { static{ System.loadLibrary("jni"); } ... } Class class2 { static{ System.loadLibrary("jni"); } ... } static { System.loadL
Class class1 {
static{
System.loadLibrary("jni");
}
...
}
Class class2 {
static{
System.loadLibrary("jni");
}
...
}
static { System.loadLibrary("LibFile"); }
唯一的问题是,我只希望调用System.loadLibrary()一次,因为这可能需要一段时间。是否有一种简单而干净的方法来防止对同一个库进行多次加载?如果已经加载了库,则将忽略加载同一库的任何后续调用 : 加载由指定的系统库 libname参数。举止 哪个库名称映射到 实际的系统库是系统 依赖的 调用System.loadLibrary(名称)是 实际上相当于通话
Runtime.getRuntime().loadLibrary(name)
:
使用
指定的库名称。档案
包含的本机代码从加载
从某个位置删除本地文件系统
库文件按惯例存放在哪里
获得。这个过程的细节是什么
它们依赖于实现。这个
从库名称映射到
特定的文件名是在
系统特定方式
首先,如果有安全经理,
它的checkLink方法是用
libname作为其参数。今年五月
导致安全异常
方法System.loadLibrary(字符串)
是传统的和方便的吗
调用此方法的方法。如果
本机方法将用于
类、标准的实现
策略是将本机代码放入
库文件(称为LibFile)和
然后放置一个静态初始值设定项:
Class class1 {
static{
System.loadLibrary("jni");
}
...
}
Class class2 {
static{
System.loadLibrary("jni");
}
...
}
static { System.loadLibrary("LibFile"); }
在类声明中。当
类进行加载和初始化时
必要的本机代码实现
对于本机方法,将
也装了
如果调用此方法的次数超过
一旦使用相同的库名称,则
第二次和随后的呼叫是
已忽略。
我敢肯定,任何后续调用加载已经加载的库都不会产生任何效果[需要引用]
这在
ClassLoader
类源代码中得到了验证,但我仍在尝试为此寻找一个好的源代码。创建一个只在第一次实例化时加载“jni”的单例类,并在class1和class2中调用该单例,而不是在System.loadLibrary(“jni”)中从-
如果使用相同的库名称多次调用此方法,则忽略第二次和后续调用
System.load也是这样吗?文档没有指定任何一种方式。是的。System.load也是如此。