Моя команда работает над анализом нашего приложения Swing, чтобы убедиться, что все собирается мусором, когда он больше не используется.Мы сталкиваемся со странной проблемой.
Мы просто открываем новое окно (JFrame
) и закрываем его.Этот фрейм содержит класс EmptyPanel
(который содержит короткое сообщение о том, что данных нет) и пользовательский класс JMeunBar
.Мы вообще не взаимодействуем с этим - просто немедленно закрываем окно.
Затем мы запускаем сборку мусора и делаем дамп кучи.
После анализа дамп кучи JMenuBar
не сборщик мусора.Он хранится открытым от корня GC sun.awt.AppContext
.
Как мы можем это очистить?Или это то, о чем нам не нужно беспокоиться по какой-то причине?Мы хотим быть усердными, следя за тем, чтобы наше приложение само очищалось, но мы также не хотим вращать наши колеса.
AppContext.mainAppContext
содержит HashMap, который содержит экземпляр BasicPopupMenuUI.MenuKeyboardHelper
Внутри него находится ComponentInputMapUIResource.menuInputMap
, в котором этот JMenuBar
является компонентом.