Что произойдет, если вы потеряете память в собственном коде, выделенном из Java JNI?

0

Я использовал JNI для вызова методов C, которые выделяют память. У меня есть методы для освобождения памяти, но если эти методы не вызываются, что происходит с выделенной памятью при остановке JVM?

Что происходит с "утечкой" памяти, если вы выгружаете загруженную библиотеку (см. Раздел "Как выгрузить библиотеку (DLL) из java JVM)?

Теги:
memory-leaks
jni

3 ответа

3
Лучший ответ

Когда JVM остановлен (убит или завершен), ОС вернет всю связанную память с этим процессом. Это включает в себя любую память, выделенную внутри вашего собственного кода.

1

Случится все то же самое, что происходит с обычным C кодом. Эта память будет просочиться, если smth не вернет ее. Для большинства современных ОС это означает, что ресурсы будут освобождены при выходе из процесса. Выгрузка JVM ничего не значит.

1

Обычный способ избежать этой проблемы состоит в том, чтобы связанная с C память была сильно связана с каким-либо java-объектом и имела финализатор этого объекта java, который вызывает метод JNI для освобождения памяти. Таким образом, все будет очищено сборщиком мусора, и пользователь вашей библиотеки не должен забывать о методе очистки JNI.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню