Java:当DLL由ClassLoader加载时,它们存储在内存中?

时间:2014-04-02 21:20:14

标签: java memory dll jvm classloader

我的理解是.dllsjava.library.path加载到ClassLoader,但在System.loadLibrary()System.load()调用后,它们存储在内存中的哪个位置非静态程序?

JVM Internal Architecture

2 个答案:

答案 0 :(得分:4)

当调用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

答案 1 :(得分:1)

'非静态程序'与它无关。既没有Java堆,也没有Java,或者你的图片。代码被映射到进程的代码空间,数据被映射到进程的数据空间。