我的理解是.dlls
被java.library.path
加载到ClassLoader
,但在System.loadLibrary()
和System.load()
调用后,它们存储在内存中的哪个位置非静态程序?
答案 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,或者你的图片。代码被映射到进程的代码空间,数据被映射到进程的数据空间。