【发布时间】:2011-08-20 10:29:11
【问题描述】:
我的团队正在分析我们的 Swing 应用程序,以确保在不再使用所有内容时对其进行垃圾收集。我们遇到了一个奇怪的问题。
我们只是打开一个新窗口 (JFrame) 并关闭它。此框架包含一个EmptyPanel 类(其中包含一条说明没有数据的短消息)和一个自定义JMeunBar 类。我们根本不与之交互 - 只需立即关闭窗口。
然后,我们强制进行垃圾回收并进行堆转储。
根据堆转储分析,JMenuBar 没有被垃圾收集。它从 GC Root sun.awt.AppContext 保持打开状态。
我们如何清理它?或者这是我们出于某种原因不必担心的事情?我们希望努力确保我们的应用程序能够自行清理,但我们也不想在这方面旋转我们的车轮。
AppContext.mainAppContext 包含一个 HashMap,其中包含一个 BasicPopupMenuUI.MenuKeyboardHelper 实例。这里面是一个ComponentInputMapUIResource.menuInputMap,它有这个JMenuBar作为一个组件。
【问题讨论】:
标签: java swing memory-management