Hi, all,
I've been investigating an out-of-memory error that happens on the server
in some environments.  In analyzing the java heap dumps, one of the biggest
consumers of memory is with the wsdl4j WSDLDefinition objects.   The heap
dump indicates that the WSDLDefinition uses the xerces dom for underlying
support, particularly for schemas.  This makes the WSDLDefinition very
heavy-weight.

The heap dump also shows that the WSDLDefinition objects of concern are the
ones being saved in the AxisService's ParameterInclude list.  Comments in
the code (WSDL11ToAxisServiceBuilder) indicate that this is done so that,
if some component needs to utilize the WSDLDefinition, the component can
access it via a Parameter in the AxisService.

Is it possible to reduce the utilization of the WSDLDefinition?
Some ideas are:
(a) releasing it when it is no longer needed
         - this might not be possible to determine

(b) putting a wrapper on the WSDLDefinition object
         - so that the WSDLDefinition,or a portion of the WSDLDefinition,
           can be released
         - but if the WSDLDefinition is accessed after it was released,
           the wrapper can reload the WSDLDefinition transparently to the
           user

(c) create a layer for caching wsdl-related information
         - this would allow for releasing memory based on some algorithm
           and/or interface that could indicate what's no longer needed

Ann

Reply via email to