反射によって記載されたdllの名前を取得し、反射によってロードされたdllファイルを解放する
1556 ワード
ロードしたdllファイルの名前を取得
dllファイルを解放し、名前に基づいて特定のdllファイルを解放できます.
try{
ClassLoader classLoader = this.getClass().getClassLoader();
Field field = ClassLoader.class.getDeclaredField("nativeLibraries");
field.setAccessible(true);
Vector libs = (Vector) field.get(classLoader);
logger.info("nativeLibraries size = " + libs.size());
Iterator it = libs.iterator();
Object o;
while (it.hasNext()) {
o = it.next();
Field fieldName = o.getClass().getDeclaredField("name");
fieldName.setAccessible(true);
// o
logger.info("nativeLibraries name = " + fieldName.get(o));
}
}catch (Exception e){
logger.info("nativeLibraries = " + e.toString());
}
dllファイルを解放し、名前に基づいて特定のdllファイルを解放できます.
try {
ClassLoader classLoader = this.getClass().getClassLoader();
Field field = ClassLoader.class.getDeclaredField("nativeLibraries");
field.setAccessible(true);
Vector libs = (Vector) field.get(classLoader);
Iterator it = libs.iterator();
Object o;
while (it.hasNext()) {
o = it.next();
Method finalize = o.getClass().getDeclaredMethod("finalize", new Class[0]);
finalize.setAccessible(true);
finalize.invoke(o, new Object[0]);
}
} catch (Exception ex) {
System.out.println(" dll , !");
throw new RuntimeException(ex);
}