[jdom-interest] Recycling jdom elements ?

Paul Libbrecht paul at activemath.org
Mon Sep 5 13:37:01 PDT 2005


Le 5 sept. 05, à 20:45, Tatu Saloranta a écrit :

> --- Paul Libbrecht <paul at activemath.org> wrote:
>> I will call System.gc() programmatically later...
>
> This probably won't help with OutOfMemory cases -- GC
> is always called before this exception is thrown.
> Problem is probably the temporary processing memory
> usage, or with too low heap size settings for JVM,
> things GC has not control over.

Interesting... I think that, then, this gc call at OutOfMemoryError is 
done asynchronously....

>> but in the meantime,
>> I realize that it would be very meaningful to
>> recycle JDOM elements
>> (and, in particular, lists in them) instead of
>> garbage-collecting them.
>
> Recycling would actually increase memory usage
> (temporary storage of objects to be recycled uses
> memory that GC can not touch; unless done using
> special [weak?] references, something which is quite
> expensive compared to simple object creation).
> With newer JVMs, object recycling is also often a bad
> idea (generational GC assumes majority of objects are
> short-lived; long-lived ones are more expensive to
> reclaim); this has been gradually changing since days
> of 1.0.2, when object recycling made more sense.
> This seems to be the general consensus, at least;
> object pools are most useful with objects that are
> expensive to create (DB connections etc.), and less so
> with temporary objects.

But how would you explain, then, the fact that I can avoid the 
OutOfMemoryError by calling gc() regularly!

I can only explain this by the fact that gc() takes time (probably too 
much time) to trigger elect JDOM objects to gc().
Long ago when I tried profiling, I tended to end with thousands of 
Lists...

Re-using the elements would avoid having them hanging around as they 
would be quicker made eligible for re-use (i.e. with a call at 
controlled place as opposed to "with the result of the search of the 
gc()").

Remember that a JDOM element is not just an object with a few 
variables. Eaach element has an amount of lists attached, each being 
ArrayLists (I think) and each being doubled several times while 
parsing.

paul



More information about the jdom-interest mailing list