[prev in list] [next in list] [prev in thread] [next in thread] 

List:       fop-user
Subject:    Re: Possible memory leak
From:       Andreas L Delmelle <a_l.delmelle () pandora ! be>
Date:       2006-07-27 21:56:23
Message-ID: 3F3A61D6-5F31-4F0B-8717-7732B349D5C8 () pandora ! be
[Download RAW message or body]

On Jul 27, 2006, at 18:54, Karthik wrote:

> Coming back to profiling, I tried taking a snapshot of the heap  
> after a FOP
> conversion using Jprobe and Jprobe reports "CondLengthProperty" as  
> the loitering
> object. Not very familiar with analyzing this further. I have a  
> snapshot file
> and some screen prints of Jprobe, not sure how to post it in this  
> forum.

Well, best to avoid posting large attachments to the list, as you  
will force every subscriber to download them.

Maybe we could also move this whole discussion to Bugzilla, and add  
those files as attachments over there. Benefit is that, even when we  
don't immediately have the time to look further, there will be a  
constant reminder to look into this.

> But this is how the reference tree to the object looks like  :
>
> Root -> AreaTreeHandler -> XMLWhiteSpaceHandler -> Block ->  
> TableCell ->
> CommonBorderPaddingBackground -> CondLengthProperty ->  
> CondLengthProperty

Hmm... So, are you sure *all* these CondLengthProperty instances have  
this same reference tree? Or did you check only one?

Attempt at interpretation:
In itself, *one* of these trees at a given point in the process is  
certainly nothing to worry about. The WS-handler keeps a reference to  
the current block. That block references its parent, a TableCell,  
which references its own properties, and a length-conditional  
property holds a reference to its corresponding property --e.g.  
padding-before<->padding-top, depending on whether 'before' maps to  
'top' given the writing-mode and reference-orientation).
I wouldn't be surprised to see a lot of these trees occur in the  
course of the process, but if I esteem correctly, in a literal  
snapshot, there should be only one. There is only one handler which  
has one reference to the current block. That reference is never  
explicitly cleared, but strictly speaking, it never needs to be since  
it is re-used. Taking a snapshot right after FOP has finished, would  
reveal the last one, provided that the reference tree Root- 
 >AreaTreeHandler->XMLWhiteSpaceHandler has not yet been completely  
cleared/released.

At most, we could try nulling this out explicitly in  
PageSequence.endOfNode(), but I'm not sure if that is going to make  
much of a difference. It *may* result in those objects being GC'ed  
sooner, but that ultimately depends on the JVM. :/

> Not sure if I am doing the right thing, but I'm willing to help or  
> contribute
> further on this.

Something that could also be of use to judge this completely is an  
example of a FO-file (note: NOT the XML+XSLT, but the result of the  
XSL transform, because that ultimately is the input for FOP) Is it  
possible for you to generate one with Xalan or Saxon? Use a source  
XML with non-confidential dummy data. It doesn't need to be large,  
but just enough to give us an idea of what a typical document looks  
like for you --so we only have to imagine it a thousand times larger.  
(Or did you already send one to this list in the past?)


Thanks,

Andreas

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-users-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-users-help@xmlgraphics.apache.org

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic