import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Vector;
public class FreeDynamicDll {
static {
// 首先确保这些dll文件存在
System.load("c:/test/Decode.dll");
}
/**
* 卸载已经装载的dll
*
* @param dllName
* 库名,如Decode.dll
*/
private synchronized void freeDll(String dllName) {
try {
ClassLoader classLoader = this.getClass().getClassLoader();
Field field = ClassLoader.class.getDeclaredField("nativeLibraries");
field.setAccessible(true);
Vector<Object> libs = (Vector<Object>) field.get(classLoader);
Iterator<Object> it = libs.iterator();
Object o;
while (it.hasNext()) {
o = it.next();
Field[] fs = o.getClass().getDeclaredFields();
boolean hasInit = false;
for (int k = 0; k < fs.length; k++) {
if (fs[k].getName().equals("name")) {
fs[k].setAccessible(true);
String dllPath = fs[k].get(o).toString();
if (dllPath.endsWith(dllName)) {
hasInit = true;
}
}
}
if (hasInit) {
Method finalize = o.getClass().getDeclaredMethod(
"finalize", new Class[0]);
finalize.setAccessible(true);
finalize.invoke(o, new Object[0]);
it.remove();
libs.remove(o);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
FreeDynamicDll t = new FreeDynamicDll();
t.freeDll("Decode.dll");
}
}
分享到:
相关推荐
动态链接库的优势在于,多个应用程序可以共享同一份库文件,减少了内存占用,并且可以在程序运行时动态加载或卸载,使得更新或修复库文件变得简单。 1. **SQLite的核心特性** - **事务处理**:SQLite支持ACID...
在IT行业中,GSM MODEM动态链接库(DLL)的二次开发接口是为开发者提供的一种高效、便捷的方式来控制和操作GSM MODEM设备。DLL(Dynamic Link Library)是一种Windows操作系统中的共享库,它包含了一系列可被其他应用...
C++动态链接库解析 动态链接库(DLL,Dynamic Linker Library)是Windows操作系统中的一种共享代码机制,它允许多个程序共享同一段代码,从而节省内存资源和磁盘空间。DLL本质上是一个包含可执行代码和数据的库,可以...
标题 "Java加载dll,导致Java进程内存泄露" 描述了一个在Java编程中常见的问题,即通过Java Native Interface (JNI)加载动态链接库(dll)可能导致内存泄漏。这通常发生在Java程序与C/C++代码交互时,因为JNI允许Java...
1.Windows消息处理机制。 2.钩子函数的分类、使用、...3.Windows动态链接库的运行机制和使用方法。 4.SOCKET编程原理。 5.VC++ MFC编程基础。 6.Andorid应用开发。 7. 计算机信息安全管理与防范意思的部分内容。
在Android项目中,你需要将libcurl库集成到项目中,通常是通过静态链接库(.a文件)或动态链接库(.so文件)的方式。然后,你可以创建一个C/C++接口(JNI)与Java层交互,调用libcurl进行网络请求。 6. **发送网络...
DLL(Dynamic Linkable Library)是一种动态库,允许在运行时动态加载和卸载模块,从而减少应用程序的大小和对内存空间的需求。DLL 由全局数据、服务函数和资源组成,在运行时被系统加载到进程的虚拟空间中,成为...
具体来说,Z平台可能为开发者提供了一些预定义的API或类库,简化了与reg.dll和reg_x64.dll这两个动态链接库的交互过程。reg.dll通常是32位版本的注册表操作库,而reg_x64.dll则是64位版本,它们包含了用于读写注册表...
msjava.dll 文件是微软Java虚拟机(Microsoft Java Virtual Machine)的一部分,它是一个动态链接库,主要用于在Windows操作系统上运行Java应用程序。在早期的Windows系统中,msjava.dll是内置组件,用户可以直接...
上传个自己封的java接口,源码和依赖的jar包都在压缩文件里 test目录下有行情的demo,交易部分的API还没完全做好,可以连上前置和登录 ...变更:CTP动态链接库置入jar包 变更:将JCTP相关类独立出CTP调用包
- `"JVM路径"` 指向JVM的动态链接库(如 `%JAVA_HOME%\jre\bin\server\jvm.dll`)。 - `-Djava.class.path` 用来指定Java类路径,确保所有必要的库和类都能被找到。 - `-start` 参数后面跟的是启动类的全限定名。...
4. **lib目录**:存储了JDK的库文件,包括类库和其他支持文件,如jar文件和动态链接库。 5. **docs目录**(可能包含):包含了API文档,帮助开发者理解Java类库的使用方法。 6. **legal目录**(可能包含):包含了...
- `wrapper.dll`:Windows平台下的动态链接库文件。 - `wrapper.exe`:用于配置和管理服务的可执行文件。 - `wrapper.jar`:包含Java Service Wrapper核心类库的JAR包。 这些文件通常会被放置在一个名为`test`的...
然而,在某些特定场景下,如与硬件设备交互时,Java自身提供的API可能无法满足需求,这时就需要调用第三方DLL(动态链接库)来实现更底层的功能。本文将详细介绍如何在Java程序中调用第三方DLL,并以`java调用第三方...
Java语言天生具备动态性,这意味着开发者无需依赖底层操作系统的特定机制(如动态链接库DLL或共享对象SO),就能实现代码的热替换和动态加载。这种特性使得Java应用程序能够在运行时动态加载和卸载类,从而实现系统...
dlopen函数允许程序在运行时找到并加载动态链接库,然后使用dlclose卸载,增强了程序的灵活性。 4. **JNI调用流程**: - 定义Java层的本地方法声明,使用`native`关键字。 - 使用`javah`工具生成C/C++的头文件,...
此外,还可以通过设置`LD_LIBRARY_PATH`环境变量来指定动态链接库的搜索路径,以解决运行时找不到所需库文件的问题。例如,可以添加以下行至`~/.bashrc`文件中: ```bash export LD_LIBRARY_PATH='/home/xiaolh/...