处理JFrame是否会导致内存泄漏?



我正在编写一个测试程序,如下所示:

  1. 当用户单击按钮a时,它打开50个JFrames。
  2. 当用户单击按钮B时,它通过单击按钮a来处理所有显示的jframe。

我发现点击b按钮后内存没有减少,我使用任务管理器确定了这一点,在Windows中使用ctrl+alt+del,并检查"java"的内存使用情况。

这是正确的,没有办法,无法解决(不仅在Java PL中),

1)真的不创建大量的顶层容器在运行时/飞行,因为他们从来没有最终确定,直到当前的JVM实例退出,这些对象从来没有GC只有他们的Grapfics2D

2) myContainer#dispose()在当前JVM实例上的运行时与myContainer#setVisible(false)在JVM可用和已用内存连接上的运行时相同

3)只创建少量Top-Level Containers(同时显示的最大值),重用它,但将JPanel设置为1。st JComponent和调用myPanel#removeAll(),否则你会删除RootPane,并从你的容器停留只有边界:-)将是半透明的

4)部分可能通过调用GC来减少JVM使用的内存,但仅从Graphics2DGarbage返回数量不能立即起作用,

没有任何代码,我们不能帮助你太多…你正在调用jFrame.dispose()吗?

public void dispose()

释放所使用的所有本机屏幕资源这个窗口,它的子组件,以及它所有的子组件。那这些组件的资源将被销毁,有内存吗它们的消费将返回给操作系统,它们将被标记为不可显示。

更多信息请点击这里

如果从你的框架中有一个对GC(垃圾收集器)根的强引用,那么如果你调用dispose方法,它不会被垃圾收集,所以在你处置所有的框架之后你看不到任何内存变化。如果你想要内存,从你应该释放的东西,那么你需要垃圾收集帧

最新更新