Управление памятью Java для JNI - PullRequest
4 голосов
/ 07 октября 2010

У меня два вопроса:

  1. Что делать, если у меня вызов метода JNI и метод JNI утечек памяти.После завершения этого метода сборщик мусора JVM сможет вернуть эту память обратно.Я слышал, что JVM не управляет пространством кучи, используемым JNI?Но память, используемая JNI, является частью памяти, используемой процессом Java?

  2. Обязательно ли использовать JNI для достижения IPC?Какие другие популярные методы Java или есть библиотека с открытым исходным кодом для достижения общей памяти в Java?

Ответы [ 3 ]

3 голосов
/ 07 октября 2010
  1. Нет: «инфраструктура JNI не обеспечивает никакой автоматической сборки мусора для ресурсов памяти не-JVM, выделенных кодом, выполняемым на собственной стороне» ( Wikipedia ).
  2. Нет, Java имеет сокетов и действительно ProcessBuilder. Общая память может быть достигнута с помощью MappedByteBuffer .
2 голосов
/ 07 октября 2010
  1. Вам необходимо освободить любой ресурс os, созданный в собственном коде, такой как дескриптор файла, адрес памяти (выделенный с помощью malloc и т. Д.), Поскольку они не связаны ни с одним экземпляром jvm.
  2. Вы можете использовать Файлы с отображением в памяти ( семпл ).

  3. Вы можете использовать RPC (между компьютером и компьютером) в контексте IPC, таком как сокет, веб-служба, JMS и т. Д.

0 голосов
/ 07 октября 2010
  1. по всей вероятности да - хотя я не совсем уверен, не существует ли способа очистить эту память.
  2. взгляните на ProcessBuilder - это может помочь исключить JNI для достижения IPC.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...