You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by bu...@apache.org on 2003/06/12 20:55:17 UTC
DO NOT REPLY [Bug 20719] New: -
BeanPropertyDescriptor cpu consuming on large arrays
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20719>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20719
BeanPropertyDescriptor cpu consuming on large arrays
Summary: BeanPropertyDescriptor cpu consuming on large arrays
Product: Axis
Version: 1.1rc2
Platform: All
OS/Version: All
Status: NEW
Severity: Blocker
Priority: Other
Component: Serialization/Deserialization
AssignedTo: axis-dev@ws.apache.org
ReportedBy: nisol.fabien@hydro.qc.ca
We were faced to a BIG performance problem using Document encoding.
We have a xsl definition like the following:
<xsd:complexType name="PointIdList">
<xsd:sequence>
<xsd:element name="id" type="xsd:string" minOccurs="0"
maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
We generated code using wsdl2java, and use it in our interface implementation
BUT we were faced to a big performance problem.
There are a lot of "ids" in our requests (9500+) ...
After investigation with a profiler, we determined that the
PointIdList.setId(int idx, String value) method was called million times....
after having reduced data to 10 elements, it was 56 times ... 1+2+3+4+...+10 ...
hmmmmmmm
A little new Exception().printStackTrace() into the setId(..,..) method showed
that it was the BeanPropertyDescriptor.growArrayToSize(Object obj, Class
componentType, int i) method that was calling this method way too much.
here's the problem:
each time a new element is added to the PointIdList object, the array must be
resized. The growArrayToSize(...) method does it by creating a new Array with
the old size +1, and then copying data from old array to the new in a loop using
the set(Object, int, Object) method ... It is way too much cpu consuming , and I
think a bad idea (the PointIdList object does not want to know its array is
resized, it only want to know a new element is added)