On Jun 2, 2008, at 9:17 AM, Bharath Ganesh wrote:
> I have verified the GC with the below fix(schemaCacheMap has a weak
> value)
> and the literal String fix(now always use the url at
> WSDLServiceFactory as
> key).
>
> After an application undeployment, things look fine on the Java EE
> Server.
> Except that the entry in JAXBCONTEXT_CACHE in JAXBDataBinding would
> be still
> retained till the next endpoint deployment/undeployment - WeakHashMap
> expunges stale entries only on map access. Thus the classloader and
> JAXB
> classes of the undeployed application would still be on the heap
> till the
> next app deployment. This is not a memory leak. Later we can think
> of a
> daemon thread which will access this map periodically to force stale
> entry
> expunging.
>
> Will commit these changes on 2.1 branch. DanK hope you will apply on
> 2.0.7
> also.
Definitely. Once they are there on 2.1, I'll port them over to
2.0.7. Great work.
Dan
>
>
>
> On Mon, Jun 2, 2008 at 11:55 AM, Bharath Ganesh <
bharathganesh@...
> >
> wrote:
>
>
>> Yes we would need to iterate through the map while putting/getting
>> the
>> ServiceSchemaInfo.
>> Do you think we should instead choose to retain the schemaCacheMap,
>> but
>> make the value always a weak object. (Putting a WeakReference of the
>> ServiceSchemaInfo in the map). This way also we can solve the current
>> problem.
>> What do you say?
>>
>>
>>
>> On Sun, Jun 1, 2008 at 7:19 AM, Daniel Kulp <
dkulp@...> wrote:
>>
>>>
>>> Hmmm.... good sleuthing.
>>>
>>> You definitely don't want to unregister it on endpoint stop or
>>> when done
>>> with the client. The whole point of the cache is to hold onto it
>>> so it's
>>> reusable. On popular thing to do is create a client, use it once,
>>> discard.
>>> Create another client, use it once, discard. Etc... The cache is
>>> to help
>>> that.
>>>
>>> I think what might make some sense is to get rid of the
>>> schemaCacheMap
>>> entirely. Change the definitionsMap to be a Map<Object, DefPair>
>>> map where
>>> DepPair holds a wsdldef and the schema. Thus, the keys would be
>>> the same
>>> keys for the wsdl.
>>>
>>> The put/set's would be more expensive as you would need to iterate
>>> through
>>> the cache to find the pair. I doubt the map would be very big
>>> though so
>>> that may be acceptable.
>>>
>>> Dan
>>>
>>>
>>>
>>>
>>> On May 31, 2008, at 4:55 PM, Bharath Ganesh wrote:
>>>
>>> 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?
>>>>
>>>
>>> ---
>>> Daniel Kulp
>>>
dkulp@...
>>>
http://www.dankulp.com/blog>>>
>>>
>>>
>>>
>>>
>>
---
Daniel Kulp
dkulp@...
http://www.dankulp.com/blog