Java:当DLL由类加载器加载时,它们存储在内存中的什么位置?
我的理解是,Java:当DLL由类加载器加载时,它们存储在内存中的什么位置?,java,memory,dll,jvm,classloader,Java,Memory,Dll,Jvm,Classloader,我的理解是,类加载器将.dll加载到java.library.path中,但是在从非静态过程调用System.loadLibrary()和System.load()之后,它们存储在内存中的什么位置 “非静态过程”与此无关。Java堆、Java或您的图片也没有。代码映射到进程的代码空间,数据映射到进程的数据空间。当调用System.loadLibrary()或System.load()函数时,当前Java类的ClassLoader的任务是查找请求的DLL(及其依赖项)并将库的位置通知操作系统。Cl
类加载器将.dll
加载到java.library.path
中,但是在从非静态过程调用System.loadLibrary()
和System.load()
之后,它们存储在内存中的什么位置
“非静态过程”与此无关。Java堆、Java或您的图片也没有。代码映射到进程的代码空间,数据映射到进程的数据空间。当调用System.loadLibrary()
或System.load()
函数时,当前Java类的ClassLoader
的任务是查找请求的DLL(及其依赖项)并将库的位置通知操作系统。ClassLoader
本身不执行任何加载:此操作使用Java本机接口(JNI)库与操作系统通信,并告诉它在何处查找请求的库
调用DLL函数时,该函数将加载到Java VM进程的地址空间中并在那里执行。该地址空间是操作系统提供给进程的内存块,与Java VM完全分离。因此,您的问题的答案是Java虚拟机只是使用其给定的地址空间按需加载DLL函数,并通过Java本机接口执行它们
资料来源:我有兴趣了解更多关于“流程数据空间”的信息。您知道DLL加载位置的图片表示或图表吗?这个空间里还装了什么?如何指定大小限制?操作系统中的每个进程都有代码空间和数据空间。太宽泛了,这里无法回答。谢谢!那正是我要找的@Adil,您的知识可能有助于解决此处所述的问题:。这个问题与这个答案有关:加载共享库时发生内存错误。