User not logged in - login - register
Home Calendar Books School Tool Photo Gallery Message Boards Users Statistics Advertise Site Info
go to bottom | |
 Message Boards » » Stupid Java Question Page [1]  
neolithic
All American
706 Posts
user info
edit post

I have a memory leak that I can't figure out (it's been a while since I've done stuff in java...)

Basically I have a JFrame that takes some basic user input to get the parameters for a simulation. This main JFrame then passes the input to another class which runs and displays the results. Whenever I close the second JFrame the resources aren't freed and after multiple runs I get a out of memory/heap error. The setup is below:

public class MainWindow extends JFrame {
..take some input
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
Results r = new Results(parameters);
}
}

public class Results extends JFrame {
public Results(parameters) {
...use parameters and start sim (which creates a bunch of new objects)
...display results in this JFrame
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}

The MainWindow stays up so you can change the parameters and rerun. Each time you hit go a new Results window is created. I keep running out of heap space though after hitting go a few times, but closing the corresponding window (i.e start sim -> close results frame -> start sim -> close results frame -> start sim -> crash). Anyone have a guess why the resources in Results frame aren't being freed?

[Edited on February 4, 2012 at 7:58 PM. Reason : ]

2/4/2012 7:58:04 PM

Talage
All American
5092 Posts
user info
edit post

What's your JRE version?

2/4/2012 8:13:12 PM

neolithic
All American
706 Posts
user info
edit post

1.6

2/4/2012 8:46:22 PM

Noen
All American
31346 Posts
user info
edit post

why not initialize Results r as a class variable, rather than instanced in the method?

2/4/2012 9:01:19 PM

neolithic
All American
706 Posts
user info
edit post

I tried that (and a lot of other permutations) and it still happens. I also tried overriding dispose in Results to null everything out, call System.gc(), and then call super.dispose(). I can't figure it out.

2/4/2012 9:04:27 PM

moron
All American
34142 Posts
user info
edit post

Are you able to create multiple results windows simultaneously?

Could be it for some reason Java thinks "r" is still referenced from the MainWindow and keeps it around, even after multiple window spawns?

2/4/2012 9:45:32 PM

neolithic
All American
706 Posts
user info
edit post

Yeah, every time I hit the button a new window pops up, like it should. Hitting the button twice without closing the popups = hitting the button once, closing the popup and hitting it again in terms of memory usage. The simulation creates really big 2D arrays of doubles so there must be a reference to one of them floating around in my main GUI.

[Edited on February 4, 2012 at 11:03 PM. Reason : ]

2/4/2012 11:03:07 PM

neolithic
All American
706 Posts
user info
edit post

I think I figured it out for anyone who might be interested. In my results viewer I'm using a scientific computation package called "Jhepwork" for plotting. Each of the plots are added to my Results frame via a getContentPane() method, which returns a JFrame. Well, for whatever reason these were not getting disposed of properly when I closed each Results window. I ended up overriding dipose() in my Results window and explicitly calling the proper dispose methods there before calling super.dispose().

Anyway, lesson learned. Keep track of any ContentPanes you may have used.

[Edited on February 5, 2012 at 10:26 AM. Reason : ]

2/5/2012 10:25:35 AM

Novicane
All American
15416 Posts
user info
edit post

i thought there was a command you could run to clean up to prevent things like this?

2/5/2012 2:14:33 PM

Shaggy
All American
17820 Posts
user info
edit post

sounds like you found it, but for future reference I've used this eclipse plugin in the past to track down leaks: http://www.eclipse.org/mat/

its pretty good especially when you can reliably reproduce the leak

2/5/2012 10:05:59 PM

 Message Boards » Tech Talk » Stupid Java Question Page [1]  
go to top | |
Admin Options : move topic | lock topic

© 2024 by The Wolf Web - All Rights Reserved.
The material located at this site is not endorsed, sponsored or provided by or on behalf of North Carolina State University.
Powered by CrazyWeb v2.39 - our disclaimer.