处理 JFrame 会导致内存泄漏吗?
I am writing a test program as follows:
- When a user clicks button A, it opens 50 JFrames.
- When the user clicks button B it disposes all JFrames shown by clicking button A.
I find that the memory does not decrease after clicking button B. I determined this using the Task Manager, ctrl+alt+del in Windows, and checking the memory usage of "java".
解决方案That's right, no way, not able to solve that (not only in Java PL),
1) really don't create lots of Top-Level Containers on Runtime/Fly, because they are never finalized, and until current JVM instance exits, and these Object never been GC'ed only their Grapfics2D
2) myContainer#dispose()
on Runtime is same for current JVM instance as myContainer#setVisible(false)
in connections with JVM available and used Memory
3) create only few Top-Level Containers
(maximum simultaneously displayed ), re-use that, but put there JPanel as 1.st JComponent
and call myPanel#removeAll()
, otherwise you'll remove RootPane and from your Container stays only Borders :-) would be translucent
4) partialy is possible to reduce JVM used Memory by call GC, but just returs amount from Graphics2D
and Garbage
doesn't works immediatelly,
5) more here usefull info here
相关文章