2012-03-12 95 views
2

我继承了一个小型Java项目的维护,它带有一个DLL依赖项(JNI)。用一组参数调用java程序,这些参数被发送到DLL(并进一步发送到第三方API)。输入和输出都是简单的字符串。当Java进程退出时,由JNI DLL使用的内存是否被使用?

DLL使用的内存是从java进程堆中分配的内存?那么,这是否意味着当java程序退出时,此进程中的所有内存(包括由DLL使用的内存)都会返回给系统?

(我们正在谈论的Windows Server 2008和Java 1.6,如果这样的事情的细节。)

回答

5

操作系统是负责清理进程终止时由进程分配的所有内存。

DLLs被“加载”进程中。因此,当JVM [进程]终止全部时,内存(包括由DLL分配的内存)将被操作系统收回。

请注意,这不包括外部资源,例如来自其他已启动但未终止的[子]进程的资源或共享资源(其他位置仍有打开句柄),或资源不在OS控制之外(例如分布式缓存) 。

快乐编码。

相关问题