gpt4 book ai didi

java - 我如何让 AppContext 释放 AWT 组件以便它们可以被垃圾收集?

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:48 24 4
gpt4 key购买 nike

我的团队正在分析我们的 Swing 应用程序,以确保在不再使用时对所有内容进行垃圾回收。我们遇到了一个奇怪的问题。

我们只是打开一个新窗口 (JFrame) 然后关闭它。此框架包含一个 EmptyPanel 类(其中包含一条说明没有数据的短消息)和一个自定义 JMeunBar 类。我们根本不与之交互 - 只需立即关闭窗口。

然后,我们强制进行垃圾回收并进行堆转储。

根据对堆转储的分析,JMenuBar 未被垃圾回收。它在 GC Root sun.awt.AppContext 中保持打开状态。

我们如何清理它?或者这是我们出于某种原因不必担心的事情?我们希望尽职尽责地确保我们的应用程序自行清理,但我们也不想为此浪费时间。

AppContext.mainAppContext 包含一个 HashMap,它包含一个 BasicPopupMenuUI.MenuKeyboardHelper 实例。这里面是一个 ComponentInputMapUIResource.menuInputMap,它有这个 JMenuBar 作为一个组件。

最佳答案

讨论 here在 JVM 的正常操作过程中,有许多系统资源必须显式释放。图形上下文的 dispose()方法是一个例子;父窗口的 dispose()方法是另一种。在任何一种情况下,资源都可能被正确释放,但您可能会在堆完成之前观察它。

很难概括可以安全忽略的内容,但一种经验方法是在分析器中执行目标。此 comparison 中的前两张图显示某种怀疑保留资源的方法消耗的内存小而稳定地增加。相比之下,第三张图表显示了平坦的内存使用和垃圾收集 Activity 的周期性峰值。下面是一个视觉上“繁忙”程序的典型锯齿模式,例如这个 game .请注意,每个循环都会返回到基线。

enter image description here

关于java - 我如何让 AppContext 释放 AWT 组件以便它们可以被垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5916028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com