【发布时间】:2026-02-19 08:10:01
【问题描述】:
我的理解是.dlls 由ClassLoader 加载到java.library.path,但是在从非静态过程调用System.loadLibrary() 和System.load() 之后它们存储在内存中的什么位置?
【问题讨论】:
标签: java memory dll jvm classloader
我的理解是.dlls 由ClassLoader 加载到java.library.path,但是在从非静态过程调用System.loadLibrary() 和System.load() 之后它们存储在内存中的什么位置?
【问题讨论】:
标签: java memory dll jvm classloader
当调用System.loadLibrary() 或System.load() 函数时,当前Java 类的ClassLoader 的任务是查找请求的DLL(及其依赖项)并通知操作系统有关库的位置。 ClassLoader 本身不执行任何加载:此操作使用 Java 本地接口 (JNI) 库与操作系统通信并告诉它在哪里查找请求的库。
当调用 DLL 函数时,该函数被加载到 Java VM 进程的 地址空间 中并在那里执行。该地址空间是操作系统为进程提供的内存块,并且与 Java VM 完全分离。因此,您的问题的答案是 Java VM 只是使用其给定的地址空间来按需加载 DLL 函数并通过 Java Native Interface 执行它们。
来源:http://www.webbasedprogramming.com/Tricks-of-the-Java-Programming-Gurus/ch30.htm
【讨论】:
'非静态过程'与它无关。 Java 堆也没有,Java 或您的图片也没有。代码映射到进程的代码空间,数据映射到进程的数据空间。
【讨论】: