`

java 卸载动态链接库

阅读更多
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");
 }
}


 

分享到:
评论

相关推荐

    sqlite动态链接库

    动态链接库的优势在于,多个应用程序可以共享同一份库文件,减少了内存占用,并且可以在程序运行时动态加载或卸载,使得更新或修复库文件变得简单。 1. **SQLite的核心特性** - **事务处理**:SQLite支持ACID...

    GSM MODEM动态链接库(DLL)二次开发接口及例程

    在IT行业中,GSM MODEM动态链接库(DLL)的二次开发接口是为开发者提供的一种高效、便捷的方式来控制和操作GSM MODEM设备。DLL(Dynamic Link Library)是一种Windows操作系统中的共享库,它包含了一系列可被其他应用...

    C++动态链接库解析.pdf

    C++动态链接库解析 动态链接库(DLL,Dynamic Linker Library)是Windows操作系统中的一种共享代码机制,它允许多个程序共享同一段代码,从而节省内存资源和磁盘空间。DLL本质上是一个包含可执行代码和数据的库,可以...

    Java加载dll,导致Java进程内存泄露

    标题 "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. 计算机信息安全管理与防范意思的部分内容。

    安卓安装卸载相关-监听自身应用卸载并在卸载之后使用libcurl三方库进行一次三方请求或者启动网页的实例工程。.rar

    在Android项目中,你需要将libcurl库集成到项目中,通常是通过静态链接库(.a文件)或动态链接库(.so文件)的方式。然后,你可以创建一个C/C++接口(JNI)与Java层交互,调用libcurl进行网络请求。 6. **发送网络...

    关于DLL动态库调用

    DLL(Dynamic Linkable Library)是一种动态库,允许在运行时动态加载和卸载模块,从而减少应用程序的大小和对内存空间的需求。DLL 由全局数据、服务函数和资源组成,在运行时被系统加载到进程的虚拟空间中,成为...

    Java操作注册表插件

    具体来说,Z平台可能为开发者提供了一些预定义的API或类库,简化了与reg.dll和reg_x64.dll这两个动态链接库的交互过程。reg.dll通常是32位版本的注册表操作库,而reg_x64.dll则是64位版本,它们包含了用于读写注册表...

    msjava.dll下载

    msjava.dll 文件是微软Java虚拟机(Microsoft Java Virtual Machine)的一部分,它是一个动态链接库,主要用于在Windows操作系统上运行Java应用程序。在早期的Windows系统中,msjava.dll是内置组件,用户可以直接...

    上期所股指期货程序交易CTP接口(Java源码+jar支持包)

    上传个自己封的java接口,源码和依赖的jar包都在压缩文件里 test目录下有行情的demo,交易部分的API还没完全做好,可以连上前置和登录 ...变更:CTP动态链接库置入jar包 变更:将JCTP相关类独立出CTP调用包

    使用JavaService把Java程序转换成windows服务

    - `"JVM路径"` 指向JVM的动态链接库(如 `%JAVA_HOME%\jre\bin\server\jvm.dll`)。 - `-Djava.class.path` 用来指定Java类路径,确保所有必要的库和类都能被找到。 - `-start` 参数后面跟的是启动类的全限定名。...

    jdk.1.8 java免安装包

    4. **lib目录**:存储了JDK的库文件,包括类库和其他支持文件,如jar文件和动态链接库。 5. **docs目录**(可能包含):包含了API文档,帮助开发者理解Java类库的使用方法。 6. **legal目录**(可能包含):包含了...

    Java程序快速转换为windows服务运行

    - `wrapper.dll`:Windows平台下的动态链接库文件。 - `wrapper.exe`:用于配置和管理服务的可执行文件。 - `wrapper.jar`:包含Java Service Wrapper核心类库的JAR包。 这些文件通常会被放置在一个名为`test`的...

    java调用第三方dll

    然而,在某些特定场景下,如与硬件设备交互时,Java自身提供的API可能无法满足需求,这时就需要调用第三方DLL(动态链接库)来实现更底层的功能。本文将详细介绍如何在Java程序中调用第三方DLL,并以`java调用第三方...

    Jave深度历险(CH_02深入类别载入器)

    Java语言天生具备动态性,这意味着开发者无需依赖底层操作系统的特定机制(如动态链接库DLL或共享对象SO),就能实现代码的热替换和动态加载。这种特性使得Java应用程序能够在运行时动态加载和卸载类,从而实现系统...

    jni-util.zip

    dlopen函数允许程序在运行时找到并加载动态链接库,然后使用dlclose卸载,增强了程序的灵活性。 4. **JNI调用流程**: - 定义Java层的本地方法声明,使用`native`关键字。 - 使用`javah`工具生成C/C++的头文件,...

    Ubuntu通过apt-get命令安装java jdk6

    此外,还可以通过设置`LD_LIBRARY_PATH`环境变量来指定动态链接库的搜索路径,以解决运行时找不到所需库文件的问题。例如,可以添加以下行至`~/.bashrc`文件中: ```bash export LD_LIBRARY_PATH='/home/xiaolh/...

Global site tag (gtag.js) - Google Analytics