Author: James Swafford
Date: 05:34:21 11/10/05
Go up one level in this thread
On November 10, 2005 at 02:07:00, Alessandro Damiani wrote: >On November 09, 2005 at 18:06:42, James Swafford wrote: > >>Please forgive me for the off-topic post. >> >>I have a rather annoying problem that I'm hoping one of you Java >>guys can help me with. >> >>I have a Java/SWING application that works really well, but it consumes >>SO much memory. Actually, it's a client/server program. The server >>side runs off almost no memory, but the client side is a beast. It's >>the SWING libraries. >> >>Now, I know that Java, and SWING in particular, have reputations for >>being memory hogs. BUT- I'm observing some behavior in my application >>that has me troubled. It never seems to release memory! That is, the >>memory consumption goes steadily up the longer the application is >>run. It's as if the garbage collector is never doing any collection. >> >>In my research I learned that there are no guarantees about when >>the garbage collector will reclaim memory from dereferenced objects. >>It may, in theory anyway, delay the process until the system's >>resources are below some threshold, then reclaim memory. That being >>the case, it's understandable that the application would have the >>appearance of consuming more and more memory with time, IF the >>system indeed still had plenty of free RAM. >> >>However- I'm noticing that it's not reclaiming memory *even when the >>system is almost out of free memory*. As a result, users are complaining >>about slow performance when the program has been running for over >>an hour or so. >> >>For a language that is supposed to take the burden of memory management >>out of the hands of the developer, I'm sure spending a lot of time >>researching and trying to figure out why I'm running out of system >>resources. >> >>I wonder if any of you Java developers might have some insight? >>BTW, if it makes any difference at all: my application uses >>JInternalFrames, all contained within a single JFrame. When an >>internal frame is closed, I simply do a dispose(). As far as I >>know, that should make all the objects within that frame eligible >>for garbage collection since they can't be referenced. >> >>Any ideas or insight would be very much appreciated. >> >>-- >>James > >The main reason of memory leaks in Java are listeners. If an object is not used >through direct referencing but you have listeners on it then the garbage >collector can only collect the whole set of coupled objects. For instance, if >your application class references an object that never dies and this one listens >to an object, then this one can never be collected. There are tools around that >display currently existing objects in memory, or write your own one through Java >Reflections as we did at work. Thanks, but we don't make extensive use of listeners. I do appreciate the tip though.. > >Alessandro
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.