Karlovsky120
Karlovsky120

Reputation: 6352

Large amount of data deletion

I have a program with GUI with segment that can be large and contain a lot of objects. One of the features of my program is to "close" that segment and create a new one.

This whole segment is attached to the program by only one JPanel and an ArrayList. If I dispose of/set those two to null there should be no way to access the any of the JPanels childen (one of which are complex object extending GUI components, but also containing a lot of variables).

If I'm correct, all of JPanels childeren will be collected by garbage collector.

However, what happens to the children of the children? I have some "families" that go up to 5-6 "generations". Will they be deleted only upon GC's 5th (or 6th) pass, or will it detect the whole "family" as unacessible and collect it all at once (or upon it's first pass)?

EDIT: Another minor question: Is there a method for swing component that will remove all of it's children?

Upvotes: 1

Views: 89

Answers (2)

trashgod
trashgod

Reputation: 205805

For an empirical approach, exercise your program repeatedly and look for the pattern shown here, in which the memory consumed fails to return to baseline.

image leak

In contrast, this example returns to the baseline after each cycle.

image no leak

Upvotes: 2

Eric Hydrick
Eric Hydrick

Reputation: 3527

The comments to your question do a good job of addressing the deletion issue. But, if you're still curious about removing a component's children without removing the component, the answer is no, as seen in the JComponent documentation (I'm assuming you're on Java 7, if not you can easily change to the proper version of Java). If you want to quickly and easily remove just the children from a component without removing the component itself, I recommend just re-initializing the component.

Upvotes: 0

Related Questions