我正在编写一个测试程序,如下所示:
- 当用户单击按钮a时,它打开50个JFrames。
- 当用户单击按钮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使用的内存,但仅从Graphics2D
和Garbage
返回数量不能立即起作用,
没有任何代码,我们不能帮助你太多…你正在调用jFrame.dispose()吗?
public void dispose()释放所使用的所有本机屏幕资源这个窗口,它的子组件,以及它所有的子组件。那这些组件的资源将被销毁,有内存吗它们的消费将返回给操作系统,它们将被标记为不可显示。
更多信息请点击这里
如果从你的框架中有一个对GC(垃圾收集器)根的强引用,那么如果你调用dispose方法,它不会被垃圾收集,所以在你处置所有的框架之后你看不到任何内存变化。如果你想要内存,从你应该释放的东西,那么你需要垃圾收集帧