Что такое «Глобальная ссылка JNI»

Я использую jProfiler, чтобы найти утечки памяти в приложении Java Swing. Я определил случаи JFrame, число которых продолжает расти.

Этот кадр открывается, а затем закрывается.

Используя jProfiler и просматривая Paths to GC Root, есть только одна ссылка, «JNI Global reference».

Что это значит? Почему это висит на каждом экземпляре кадра?

Ответы на вопрос(3)

управляемого Java-сборщиком мусора. Его цель состоит в том, чтобы предотвратить сбор объекта, который все еще используется собственным кодом, но, похоже, не имеет никаких живых ссылок в коде Java.

JFrame - этоjava.awt.Windowи связан с "нативным" Оконный объект. Когда вы закончите работу с конкретным экземпляром JFrame, вы должны вызвать егоdispose() способ убрать.

Я не уверен, создает ли какой-либо нативный код глобальную ссылку на JFrame, но это кажется вероятным. Если это произойдет, это предотвратит сборку мусора JFrame. Если вы создаете много окон (или подклассов) и видите, что они никогда не собираются, убедитесь, что они утилизированы.

 24 сент. 2008 г., 18:03
Если код только Java, это наиболее вероятное объяснение. У меня были проблемы с глобальными указателями, но я работал с JNI.
Решение Вопроса

Собственный интерфейс Javaпо сути, он обеспечивает связь между Java и библиотеками операционной системы, написанными на других языках.

Глобальные ссылки JNI склонны к утечкам памяти, так как они не собираются автоматически, и программист должен явно освободить их. Если вы сами не пишете код JNI, возможно, используемая вами библиотека имеет утечку памяти.

edit Вот немного больше информации о локальных и глобальных ссылках, и почему используются глобальные ссылки (и как они должны быть освобождены)

 24 мая 2012 г., 02:31
Википедия является вторичным источником. Основным источником и официальным документом являетсяJNI Specification.

нии JavaFX. В итоге проблема оказалась в том, что я запускал приложение вdebug mode и имел несколько точек останова в коде. Похоже, что это привело к тому, что объекты стали «JNI Global reference». и хранится в памяти без видимой причины. Когда я выключил режим отладки, все работало как надо!

 14 янв. 2018 г., 16:47
Еще один здесь .. ха-ха
 11 дек. 2017 г., 06:25
Дерьмо, это именно то, что только что случилось со мной!

Ваш ответ на вопрос