On 18.07.2007 23:05:57 Andreas L Delmelle wrote: > On Jul 18, 2007, at 22:17, Jeremias Maerki wrote: > > > So I wanted to play with this really great tool a little more and > > ran a > > big document which I knew would cause an OutOfMemoryError at 64MB heap > > size. Here's what came out: > <snip /> > > Interesting figures! > Did you have any chance to run a comparative test with say, FOP 0.93?
No, that need to wait until after my holidays. One thing, I'm planning is to create a tool that downloads older FOP revisions in a one-month rhythm to see how performance evolved over time. I want to do this because I suspect we noticably lost performance somewhere during the last 2 years. That could also involve taking memory snapshots for each version to find out about memory development. > Strange results for TableColumn, though, or are those 14000 instances > normal given the input (lots of smaller nested tables)? No, just lots of small tables (an example from Luis Ferro in 2006). > <snip /> > > Immediately shows that Andreas' recent change (rev 554091) for > > switching > > off the SAX Locators can save a lot of memory. > > Well, that was also part of Richard Wheeldon's patch (Bugzilla 41044) > containing the basic idea for the property cache. The patch itself > ultimately got committed in a few parts, and very much trimmed down, > but Richard deserves most of the credit. I only applied a razor to > his patch. :-) Oops. Thanks, Richard!!! > > I remembered Andreas working on a property cache a couple of weeks > > ago. > > Seems to work fine on EnumProperty: > > This should be already the case in 0.93. I seem to remember Simon > having applied Richard's initial patch shortly before the 0.93 release. > > > Look for class: .*EnumProperty.* > > Class Name |Objects |Shallow > > Heap |Retained Heap |Perm > > ---------------------------------------------------------------------- > > ---------------------- > > org.apache.fop.fo.properties.EnumProperty$Maker| 94| > > 4'512| | > > org.apache.fop.fo.properties.EnumProperty | 182| > > 4'368| | > > Total of 2 entries | 276| > > 8'880| | > > ---------------------------------------------------------------------- > > ---------------------- > > > > Then I noticed that NumberProperty (which uses the property cache) > > has 98304 instances which couldn't be right. The problem: just using > > that WeakHashMap isn't enough without the key objects implementing > > hashCode() and equals() (see JDK javadocs). > > Ouch! A painful oversight on my part. Good thing you checked. :) > > As to the implementations, I'm wondering, since NumberProperty is > actually only a proxy for an underlying java.lang.Number, whether it > wouldn't be more convenient to simply reuse those: > > hashCode() { > return number.hashCode(); > } > > equals(Object o) { > if (o instanceof NumberProperty > && o != null) { > return this.number.equals( > ((NumberProperty) o).number); > } else { > return false; > } > > All we really need to uniquely identify a NumberProperty is the > number-member, I think... I dont' think that works, since Number doesn't implement hashCode(), for example. BTW, I don't know if we should do anything about the "specVal" member variable in Property. I think it's mostly set to null. Jeremias Maerki