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