我继承了一个带有DLL依赖(JNI)的小型Java项目的维护。使用一组参数调用java程序,这些参数被发送到DLL(并进一步发送到第三方API)。输入和输出是简单的字符串。
DLL使用的内存是从java进程堆中分配的内存吗?这样做是否意味着当java程序退出时,此过程中的所有内存(包括DLL使用的内存)都会返回给系统?
(我们正在谈论Windows Server 2008和Java 1.6,如果有类似的细节。)
答案 0 :(得分:5)
操作系统负责在进程终止时清理进程分配的所有内存。
将DLL加载到进程中。
因此,当JVM [process]终止 all 时,操作系统将回收内存(包括DLL分配的内存)。
请注意,这会排除外部资源,例如来自已启动但尚未终止的其他[子]进程的资源或在其他地方仍具有打开句柄的共享资源,或者在OS控制之外的其他资源(例如分布式缓存)。
快乐的编码。