[jdom-interest] Re: New realease, Text class... Arghh
Dennis Sosnoski
dms at sosnoski.com
Wed Jan 9 18:52:23 PST 2002
Using indexed lookup is not necessarily a good idea with the (beta)
released version of JDOM. This code returns a linked list (PartialList),
so indexing can get very expensive - it requires chaining through the
list on every access. If you *know* you're working with an ArrayList or
equivalent indexing through the elements is great. Otherwise it's safer
to use an Iterator, especially since object creation overhead is pretty
low for Hot Spot JVMs.
If the PartialList code is replaced for the next release of JDOM it
should show some nice performance improvements. Methods of the type you
mentioned (attributeCount(), nodeCount(), getAttribute(int), and
getContent(int)) would also help, since they eliminate the need for
lists to be created just so something can be returned - I pointed out a
while ago that JDOM memory usage actually grows by about a third in my
tests after a document is walked for the first time. This is because
when you ask for the attributes of an element that doesn't have any yet
JDOM creates a new list. Being able to access the attributes and content
directly would avoid this type of issue.
dom4j provides these methods, by the way, which is one of the reasons it
generally gives better performance than the current JDOM.
- Dennis
Bradley S. Huffman wrote:
>Dennis Sosnoski writes:
>
>>I'm glad to see that JDOM is adding these methods
>>
>
>May add these methods, I just hack and submit ;)
>
>>I'm not sure it's entirely fair to say "those test have a problem",
>>considering that I used what appeared to be the best methods available
>>in the released version of the code. ;-)
>>
>
>It wasn't about which JDOM methods you used, but about using a Iterator
>to trasverse a List inside a recursive method (BenchJDOM.walkElement).
>This caused the test (not JDOM) to added a additional time pentaliy.
>Granted, the change to using a for loop still doesn't give JDOM the best
>times, but the test should be as neutral as possible.
>
>In all fairness I would of used a Iterator myself and not given it a second
>thought. But now after seeing a good example of how it can affected things,
>I've made a mental note to always use a for loop and List.get(int) unless
>I need the functionality of remove.
>
>Ahhh, the joys of objects.
>
>Brad
>
More information about the jdom-interest
mailing list