RE: [OpenMap Users] Removing Layer from MapHandler

From: Benstein, Marc D. <MARC.D.BENSTEIN_at_saic.com>
Date: Thu, 29 Sep 2011 14:54:29 -0700

I'm using the 5.0beta (trunk)

-----Original Message-----
From: Don Dietrick [mailto:dfdietrick_at_gmail.com]
Sent: Thu 9/29/2011 2:06 PM
To: Benstein, Marc D.
Cc: openmap-users_at_bbn.com
Subject: Re: [OpenMap Users] Removing Layer from MapHandler
 
Hi Marc,

What version of OpenMap are you using? Are you using 4.6.5 or the 5.0beta?

- Don

On Tue, Sep 20, 2011 at 12:42 PM, Marc Benstein
<MARC.D.BENSTEIN_at_saic.com> wrote:
> Don,
>
> I'm still working on this layer leak. Here's a snip of what I'm doing. Let
> me know if I'm missing anything.
>
> I'm using an OverlayMapPanel and I get the MapHandler by calling
> getMapHandler on the OverlayMapPanel. From the MapHandler I get the
> LayerHandler. From the LayerHandler object I call addLayer with a class that
> extends Layer and to remove I call removeLayer.
>
> class FooLayer extends Layer {
>        _at_Override
>        public void projectionChanged(ProjectionEvent e) {
> ...// handle projection change
>        _at_Override
>        protected void paintComponent(Graphics g) {
> ...// draw stuff
> }
>
> OverlayMapPanel mapPanel...
> FooLayer fooLayer...
>
> MapHandler mapHandler = mapPanel.getMapHandler();
> LayerHandler layerHandler =
> mapHandler.get(com.bbn.openmap.LayerHandler.class);
>
> layerHandler.addLayer(fooLayer);
>
> layerHandler.removeLayer(fooLayer);
> fooLayer.dispose();
>
> // reference to fooLayer is now gone from anything I have
>
> // FooLayer still shows one live object even after garbage collection.
>
>
> Thanks.
>
>
>
> On 09/19/2011 04:01 PM, Marc Benstein wrote:
>>
>> Hi Don,
>>
>> It must be something over here. Because a projection change does not
>> remove the layers. I can even force garbage collection on the profiler
>> and the layer objects still show as live. I'll keep looking. Thanks for
>> your help.
>>
>>
>> On 09/19/2011 03:56 PM, Don Dietrick wrote:
>>>
>>> Hi Marc,
>>>
>>> I think what's happening is the MapBean is holding on to removed
>>> layers until the projection changes. Once a layer has been removed
>>> and the map projection is changed, the layer should be garbage
>>> collected.
>>>
>>> The purpose of this is to keep the layer in the dark about when it's
>>> actually removed, in case the user clicks a layer off/on/etc without
>>> changing the projection. This prevents having layers redo work that
>>> is valid for the current projection and keeps them ready to
>>> immediately repaint their contents if re-added to the map.
>>>
>>> I just ran a test using a profiler, and my layers were gone after the
>>> projection change.
>>>
>>> Hope this helps,
>>>
>>> Don
>>>
>>> On Mon, Sep 19, 2011 at 5:15 PM, Marc
>>> Benstein<MARC.D.BENSTEIN_at_saic.com> wrote:
>>>>
>>>> Just to confirm that this is potentially an openmap issue. I added
>>>> com.bbn.openmap.layer.test.TestLayer and removed the layer using
>>>> MapHandler
>>>> as well as LayerHandler. There is definitely a leak. However, it
>>>> could be in
>>>> the JDK.
>>>>
>>>> On 09/19/2011 02:55 PM, Marc Benstein wrote:
>>>>>
>>>>> Don,
>>>>> Thanks for the reply. I was wrong before _all_ layers that I add to
>>>>> MapHandler or the LayerHandler fail to release the added layer
>>>>> object on
>>>>> remove.
>>>>>
>>>>> Something is keeping these objects around in memory. The setList(null)
>>>>> call only frees the data which is the majority of memory. However, the
>>>>> layer object is still sitting around somewhere and the setList(null) is
>>>>> not needed if the layer itself gets freed. I will dig further. Unless
>>>>> you know of the cause.
>>>>>
>>>>> On 09/16/2011 04:51 PM, Don Dietrick wrote:
>>>>>>
>>>>>> Hi Marc,
>>>>>>
>>>>>> Removing them from the MapHandler should work, although I generally
>>>>>> deal with the LayerHandler directly. Adding setList(null) is a good
>>>>>> idea for dispose(), though, I'll add that.
>>>>>>
>>>>>> - Don
>>>>>>
>>>>>> On Fri, Sep 16, 2011 at 6:36 PM, Marc
>>>>>> Benstein<MARC.D.BENSTEIN_at_saic.com> wrote:
>>>>>>>
>>>>>>> Hi openmap-users,
>>>>>>>
>>>>>>> I am having trouble removing layers from the MapHandler. I have a few
>>>>>>> layers
>>>>>>> that extend OMGraphicHandlerLayer and some that extend Layer. I add
>>>>>>> them all
>>>>>>> to MapHandler using the add(Object) method. However, even after I
>>>>>>> remove
>>>>>>> them using MapHandler.remove(Object) they are still sitting around
>>>>>>> leaking
>>>>>>> memory. I found that if I override dispose() and call super.dispose()
>>>>>>> along
>>>>>>> with setList(null) the layers that extend OMGraphicHandlerLayer are
>>>>>>> garbage
>>>>>>> collected. Unfortunately, the classes that extend Layer do not get
>>>>>>> gc'd.
>>>>>>> They are very simple layers that only override
>>>>>>> projectionChanged(ProjectionEvent) and paintComponent(Graphics).
>>>>>>> Consequently, dispose() along with remove(Object) calls do not remove
>>>>>>> them
>>>>>>> completely.
>>>>>>>
>>>>>>> I have a suggestion to the maintainers to override dispose() in
>>>>>>> OMGraphicHandlerLayer and calling setList(null) along with
>>>>>>> super.dispose().
>>>>>>>
>>>>>>> How do I _really_ remove the classes that extend Layer from the
>>>>>>> MapHandler?
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> --
>>>>>>> Marc Benstein
>>>>>>> 505-830-6763
>>>>>>>
>>>>>>> --
>>>>>>> [To unsubscribe to this list send an email to "majdart_at_bbn.com"
>>>>>>> with the following text in the BODY of the message "unsubscribe
>>>>>>> openmap-users"]
>>>>>>>
>>>>>
>>>>> --
>>>>> [To unsubscribe to this list send an email to "majdart_at_bbn.com"
>>>>> with the following text in the BODY of the message "unsubscribe
>>>>> openmap-users"]
>>>>
>>>> --
>>>> [To unsubscribe to this list send an email to "majdart_at_bbn.com"
>>>> with the following text in the BODY of the message "unsubscribe
>>>> openmap-users"]
>>>>
>>
>> --
>> [To unsubscribe to this list send an email to "majdart_at_bbn.com"
>> with the following text in the BODY of the message "unsubscribe
>> openmap-users"]
>
> --
> [To unsubscribe to this list send an email to "majdart_at_bbn.com"
> with the following text in the BODY of the message "unsubscribe
> openmap-users"]
>



--
[To unsubscribe to this list send an email to "majdart_at_bbn.com"
with the following text in the BODY of the message "unsubscribe openmap-users"]
Received on Thu Sep 29 2011 - 17:56:55 EDT

This archive was generated by hypermail 2.3.0 : Tue Mar 28 2017 - 23:25:10 EDT