How do I get a list of JNI libraries which are loaded?(如何获取已加载的 JNI 库列表?)
问题描述
正如题主所说,Java 中有没有办法获取在任何给定时间已加载的所有 JNI 本机库的列表?
Just what the subject says, is there a way in Java to get a list of all the JNI native libraries which have been loaded at any given time?
推荐答案
如果你是这个意思,有一种方法可以确定所有当前加载的本地库.无法确定已卸载的库.
There is a way to determine all currently loaded native libraries if you meant that. Already unloaded libraries can't be determined.
基于 Svetlin Nakov 的工作 (将 JVM 中加载的类提取到单个 JAR) 我做了一个 POC,它为您提供了从应用程序类加载器和当前类加载器加载的本机库的名称类.
Based on the work of Svetlin Nakov (Extract classes loaded in JVM to single JAR) I did a POC which gives you the names of the loaded native libraries from the application classloader and the classloader of the current class.
第一个简化版本没有 bu....it 异常处理,漂亮的错误消息,javadoc,....
First the simplified version with no bu....it exception handling, nice error messages, javadoc, ....
通过反射获取类加载器存储已加载库的私有字段
Get the private field in which the class loader stores the already loaded libraries via reflection
public class ClassScope {
private static final java.lang.reflect.Field LIBRARIES;
static {
LIBRARIES = ClassLoader.class.getDeclaredField("loadedLibraryNames");
LIBRARIES.setAccessible(true);
}
public static String[] getLoadedLibraries(final ClassLoader loader) {
final Vector<String> libraries = (Vector<String>) LIBRARIES.get(loader);
return libraries.toArray(new String[] {});
}
}
像这样调用上面的代码
final String[] libraries = ClassScope.getLoadedClasses(ClassLoader.getSystemClassLoader()); //MyClassName.class.getClassLoader()
瞧,libraries
保存了加载的本地库的名称.
And voilá libraries
holds the names of the loaded native libraries.
从这里获取完整的源代码
这篇关于如何获取已加载的 JNI 库列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何获取已加载的 JNI 库列表?
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- 获取数字的最后一位 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- 转换 ldap 日期 2022-01-01