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