我继承了一个小型Java项目的维护,带有DLL依赖(JNI)。使用一组参数调用 java 程序,这些参数被转发到 DLL(并进一步发送到第三方 API)。输入和输出都是简单的字符串。
DLL使用的内存是从java进程的堆中分配的吗?那么,这是否意味着当 java 程序退出时,该进程中的所有内存(包括 DLL 使用的内存)都将返回到系统?
(如果此类细节很重要,我们正在讨论 Windows Server 2008 和 Java 1.6。)
最佳答案
操作系统负责在进程终止时清理进程分配的所有内存。
DLL 被加载“到”进程中。
因此,当 JVM [进程] 终止时,所有内存(包括 DLL 分配的内存)将由操作系统回收。
请注意,这不包括外部资源,例如来自已启动但未终止的其他[子]进程的资源,或在其他地方仍具有打开句柄的共享资源,或操作系统控制之外的资源(例如分布式缓存)。
祝你编码愉快。
关于java - 当 Java 进程退出时,JNI DLL 使用的内存是否会返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672977/