Does disposing a JFrame cause memory leakage?

后端 未结 3 1273
一向
一向 2021-01-02 14:41

I am writing a test program as follows:

  1. When a user clicks button A, it opens 50 JFrames.
  2. When the user clicks button B it disposes all JFrames shown
相关标签:
3条回答
  • 2021-01-02 15:20

    If there is a strong reference to GC(garbage collector) root from your frame, then if you called dispose method, it does not get garbage collected, so you can't see any memory changes after you dispose all of the frames. If you want memory, from stuff that you should release, then you need to garbage collect the frames.

    0 讨论(0)
  • 2021-01-02 15:22

    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

    0 讨论(0)
  • 2021-01-02 15:23

    Without any code we can't help you much... are you calling jFrame.dispose()?

    public void dispose()

    Releases all of the native screen resources used by this Window, its subcomponents, and all of its owned children. That is, the resources for these Components will be destroyed, any memory they consume will be returned to the OS, and they will be marked as undisplayable.

    More information available here

    0 讨论(0)
提交回复
热议问题