我正在编写如下测试程序:
我发现单击按钮B后内存没有减少。我使用任务管理器确定了这一点, ctrl + alt + del 在Windows中,并检查“java”的内存使用情况。
答案 0 :(得分:11)
这是对的,没办法,不能解决(不仅在Java PL中),
1)真的不会在Runtime / Fly上创建大量的Top-Level Containers,因为它们永远不会被最终确定,并且直到当前的JVM实例退出,并且这些Object从未被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
重新调整数量不会立即生效,
答案 1 :(得分:2)
没有任何代码,我们无法帮助您...您是否正在调用jFrame。dispose()?
public void dispose()
释放所有使用的本机屏幕资源 通过这个窗口,它的子组件,以及它拥有的所有子组件。那 是,这些组件的资源将被销毁,任何内存 他们消费将返回到操作系统,他们将被标记为 不可显示。
提供更多信息here
答案 2 :(得分:0)
如果您的框架中存在对GC(垃圾收集器)root的强引用,那么如果您调用dispose方法,则不会收集垃圾,因此在处理完所有框架后您无法看到任何内存更改。如果你想要内存,从你应该释放的东西,那么你需要垃圾收集帧。