2
请考虑以下情形:相同的本地库
我有两个Java类,使用不同的系统类加载器加载。我有一个实现了队列的本地库。这两个类将加载相同的库,并将元素添加到队列中。可能吗?如果是这样,本地库实现将在这两个类中共享。
请考虑以下情形:相同的本地库
我有两个Java类,使用不同的系统类加载器加载。我有一个实现了队列的本地库。这两个类将加载相同的库,并将元素添加到队列中。可能吗?如果是这样,本地库实现将在这两个类中共享。
根据JNI Specification这是不可能的。
在JDK中,每个类加载器管理自己的一组本机库。 相同的JNI本地库不能加载到多个类加载器中。这样做会导致
UnsatisfiedLinkError
被抛出。例如,当用于将本机库加载到两个类加载器中时,System.loadLibrary
将引发UnsatisfiedLinkError
。
只会发生错误如果我尝试再次加载库。对? 我可以从不同的类加载器调用库中的方法吗? – Reji 2013-04-24 12:44:36
我认为下面的段落稍有回答:*“此外,本地库可以在其相应的类加载器被垃圾收集时卸载”*。所以这意味着**如果你要在不同的类加载器中使用这个库,那么本地库可能会被卸载,这将是有问题的。 – maba 2013-04-24 13:05:17