cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bharath Ganesh" <bhar...@apache.org>
Subject Memory Leak at WSDLManagerImpl
Date Sat, 31 May 2008 20:55:39 GMT
I figured out a memory leak at WSDLManagerImpl schemaCacheMap.
The schemaCacheMap here has a weak key - WSDLDefinition and value
ServiceSchemaInfo. A key,value pair is inserted into this map while building
a service. The entry is never explicitly removed from this map. Since the
map is a WeakHashMap, it is assumed that when the key WSDLDefinition is
weakly referenced, the entry would be removed from the map. But it is seen
that the value ServiceSchemaInfo(the value) holds on to a SchemaInfo which
in turn holds on to the ServiceInfo, which holds the WSDLDefinition through
the AbstractPropertiesHolder.
This would mean that the value of the CacheMap always strongly refers to the
key, which would mean the entry would never be removed from the map.
"*The value objects in a WeakHashMap are held by ordinary strong references.
Thus care should be taken to ensure that value objects do not strongly refer
to their own keys, either directly or indirectly, since that will prevent
the keys from being discarded"

*This would mean ServiceInfo, OperationInfo, BindingInfo, WSDLDefinition
would all stay in the VM even after the endpoint is stopped.

One solution I could think of was to explicitly remove the entry on endpoint
stop, instead of relying on the WeakHashMap semantics.  This would work fine
for server endpoints. But Is there any way to do so for client endpoints?

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message