Возвращается ли память, используемая JNI DLL, при выходе из процесса Java?

Я унаследовал поддержку небольшого проекта Java с зависимостью от DLL (JNI). Java-программа вызывается с набором параметров, которые передаются в DLL (и далее в сторонний API). Ввод и вывод — это простые строки.

Память, используемая DLL, выделена из кучи java-процесса? И означает ли это, как следствие, что вся память в этом процессе (включая ту, что используется DLL) возвращается в систему при выходе из java-программы?

(Мы говорим о Windows Server 2008 и Java 1.6, если такие детали имеют значение.)


person matpe    schedule 12.03.2012    source источник


Ответы (1)


Операционная система отвечает за очистку всей памяти, выделенной процессу, когда процесс завершается.

DLL загружаются «в» процесс.

Таким образом, когда [процесс] JVM завершает работу, вся память, включая память, выделенную библиотеками DLL, будет освобождена операционной системой.

Обратите внимание, что это исключает внешние ресурсы, такие как ресурсы других [под]процессов, которые были запущены, но не завершены, или общие ресурсы, которые все еще имеют открытые дескрипторы в другом месте, или ресурсы, которые иначе не контролируются ОС (например, распределенный кеш).

Удачного кодирования.

person Community    schedule 12.03.2012