Как получить AppContext для выпуска компонентов AWT, чтобы их можно было собирать?

Моя команда работает над анализом нашего приложения Swing, чтобы убедиться, что все собирается мусором, когда он больше не используется. Мы сталкиваемся со странной проблемой.

Мы просто открываем новое окно (JFrame) и закрываю его. Этот кадр содержит EmptyPanel класс (который содержит короткое сообщение о том, что нет данных) и пользовательский JMeunBar учебный класс. Мы вообще не взаимодействуем с этим - просто немедленно закройте окно.

Затем мы форсируем сборку мусора и делаем дамп кучи.

После анализа дампа кучи, JMenuBar не мусор. Его держат открытым от корня GC sun.awt.AppContext,

Как мы это уберем? Или это то, о чем нам не нужно беспокоиться по какой-то причине? Мы хотим быть усердными, следя за тем, чтобы наше приложение само очищалось, но мы не хотим, чтобы это тоже крутило.

AppContext.mainAppContext содержит HashMap, который содержит BasicPopupMenuUI.MenuKeyboardHelper пример. Внутри это ComponentInputMapUIResource.menuInputMap который имеет это JMenuBar как компонент.

1 ответ

Решение

Как обсуждалось здесь, существует ряд системных ресурсов, которые должны быть явно освобождены в ходе нормальной работы JVM. Графический контекст dispose() метод является одним из примеров; родительское окно dispose() метод другой. В любом случае ресурс может быть правильно освобожден, но вы можете наблюдать за кучей до того, как он будет завершен.

Трудно обобщить то, что можно безопасно игнорировать, но один эмпирический подход заключается в использовании цели в профилировщике. Первые два графика в этом сравнении показывают небольшое, но неуклонное увеличение памяти, используемой определенным методом, который подозревается в сохранении ресурсов. Напротив, на третьей диаграмме показано плоское использование памяти с периодическими всплесками активности по сбору мусора. Ниже приведен типичный шаблон для визуально "загруженной" программы, такой как эта игра. Обратите внимание, что каждый цикл возвращается к базовой линии.

Другие вопросы по тегам