Возвращается ли память, используемая JNI DLL, при выходе из процесса Java? - PullRequest
2 голосов
/ 12 марта 2012

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

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

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

1 Ответ

5 голосов
/ 12 марта 2012

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

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

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

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

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

...