[
https://issues.apache.org/jira/browse/XMLBEANS-389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12663707#action_12663707
]
Philip Aston commented on XMLBEANS-389:
---------------------------------------
Thanks Radu.
I may be missing something for the first issue. Why can't you use the
AbstactList.modCount to implement a fail fast iterator?
The second issue is the killer of course. Could the iterator use an XmlCursor?
If nothing can be done, I suggest the FAQ is updated to warn that the List
accessors should not be used for large arrays.
> List accessors generated with -javasource=1.5 produce lists that scale poorly
> with the size of the list
> -------------------------------------------------------------------------------------------------------
>
> Key: XMLBEANS-389
> URL: https://issues.apache.org/jira/browse/XMLBEANS-389
> Project: XMLBeans
> Issue Type: Bug
> Components: Compiler
> Affects Versions: Version 2, Version 2.1, Version 2.2, Version 2.2.1,
> Version 2.3, Version 2.3.1, Version 2.4 , Version 2.4.1
> Reporter: Philip Aston
> Attachments: testcase.tgz
>
>
> When a schema is compiled with -javasource=1.5, convenient list based
> accessors are generated as well as the array accessors. E.g.
> java.util.List<java.lang.String> getParamList()
> The implementation of the List is built upon java.lang.AbstractList. The
> AbstractList iterator's hasNext() method calls size(). For an XMLBean
> generated list, size() walks the store and so iteration scales quadratically.
> Here are some numbers showing the problem:
> XMLBeans backed list of 1 strings: 0.013766 ms
> XMLBeans backed list of 16 strings: 0.255458 ms
> XMLBeans backed list of 256 strings: 1.612057 ms
> XMLBeans backed list of 1024 strings: 25.458934 ms
> XMLBeans backed list of 2048 strings: 123.393447 ms
> XMLBeans backed list of 4096 strings: 505.594661 ms
> plain list of 1 strings: 0.002304 ms
> plain list of 16 strings: 0.007788 ms
> plain list of 256 strings: 0.013384 ms
> plain list of 1024 strings: 0.052215 ms
> plain list of 2048 strings: 0.103550 ms
> plain list of 4096 strings: 0.206648 ms
> I think the generated list should override iterator(), and return an Iterator
> that calculates the list size once per iteration.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]