You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xmlbeans.apache.org by "Radu Preotiuc-Pietro (JIRA)" <xm...@xml.apache.org> on 2009/01/14 00:02:59 UTC

[jira] Commented: (XMLBEANS-389) List accessors generated with -javasource=1.5 produce lists that scale poorly with the size of the list

    [ https://issues.apache.org/jira/browse/XMLBEANS-389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12663525#action_12663525 ] 

Radu Preotiuc-Pietro commented on XMLBEANS-389:
-----------------------------------------------

Thank you Philip, for the report and for the test case.

I have looked at this and I don't know if we are going to be able to fix it. The problem is two-fold.

One issue is that the List can change under the iterator, even without using any of the List methods, because the List is a live view to the XML document. Because of that, caching the size of the list in the iterator (I was actually considering caching it inside the List impl, so as to not have to implement Iterator) is going to cause hasNext() to stop working correctly, while it does work correctly now. Unfortunately, next() does not work correctly now and cannot be made to work correctly even if we set the iterator to be fail-fast, because like I said, we cannot capture all the changes in the List implementation code.

The second issue is that next() also walks the array and so iteration will behave quadratically even if we somehow fix hasNext(). Basically, the original XMLBeans design calls for the use of XmlCursor if you want to walk over long sequences of elements and performance is important. For the cases where performance is not important or the size of the List is not big, you can use the generic List or you can get an array containing copy of the elements (non-live) if you want to isolate yourself from potential changes to the document. But the fact is that implementing an efficient List access is very difficult in the current code.


> 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: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org