Re: [flexcoders] Module unload GC

2009-03-06 Thread claudiu ursica


10x Alex, it turns out it was an embedded CSS issue after all, I commented that 
out and now it cleans beautifully... And the GC actually comes in very quickly.
I;ll probably load the CSS at run time ...

Cheers,
Claudiu




From: Alex Harui aha...@adobe.com
To: flexcoders@yahoogroups.com flexcoders@yahoogroups.com
Sent: Thursday, March 5, 2009 9:01:37 PM
Subject: RE: [flexcoders] Module unload GC


Modules will unload when there are no longer any references to
the classes or objects in a module.  There is a cache, but it uses weak
references and will release the module when using the gc button in the
profiler.  The browser caches module SWFs but that won’t affect this issue. 
Nate’s solution sounded like the solution to the problem where you update a
module on the server and want to load the new one.
 
If a module brings in a component that hasn’t been loaded
before, usually it brings in a CSSStyleDeclaration for it as well which gets
registered with the central StyleManager and pins the module.  You can check
the id in the id column to see if the module that is pinned is the first one
loaded.
 
Alex Harui
Flex SDK Developer
Adobe
Systems Inc.
Blog: http://blogs. adobe.com/ aharui
 
From:flexcod...@yahoogro ups.com [mailto:flexcoders@ yahoogroups. com] On 
Behalf Of claudiu
ursica
Sent: Thursday, March 05, 2009 10:26 AM
To: flexcod...@yahoogro ups.com
Subject: Re: [flexcoders] Module unload GC
 
I'll try that first thing in the morning...
For now I'm loading the same module, but in the future there will be more
modules, however since we only have one now and still working on it we have to
test with one module... The thing I fear the most if that the same thing will
happen for different modules, and then I'll have a serious memory leak. The
modules will be quite complex with lots of functionality and animations
(diffren games loaded on the same shell), that's why cleaning is so
important...

I was going to duplicate the module into another project to see if that still
happens... Right now I'm nullifying manually the url of the module when
unloading but whi knows what happens behind the scenes...




 


 
From:Nate Beck n...@tldstudio. com
To: flexcod...@yahoogro ups.com
Sent: Thursday, March 5, 2009 8:16:52 PM
Subject: Re: [flexcoders] Module unload GC
Well if we're talking about modules...

If you're loading the same module over and over again that might be the
problem... A while back I had to modify ModuleLoader and while I was in the
code I seem to remember it has some caching built into it.  So it may be
possible that ModuleLoader is holding on to a reference of a module.

I got around the caching issue when loading the same module over and over again
by appending a random number to the loaded module.  (ex: myModule.swf?
uid=123456789) .

The ModuleLoader stuff I was working on was back in 2.0.1... so it might be
very different now.

Hope this helps.
On Thu, Mar 5, 2009 at 10:08 AM, claudiu ursica the_braniak@ yahoo.com
wrote:
I read this too,
however when watching in profiler the gc runs a removes a set of the instances,
the thing that bothers me is that after first load/unload the memory looks like
the module is there. After the second load looks like 2 modules are load I get
duplicate instances ... After the second unload and forcing running gc a few
times from profilet a set of instances is collected, but i still have the
memory looking like I have one module in there. I don't get it how come that on
set of instances are removed and one is there for good... It seems there is no 
way
to see if my cleaning is actually hapenning ... One could say is happening
since the second, third, forth load/unload are actually cleaned but there's
still a set of instances in the memory ... 


 


 
From:Nate Beck n...@tldstudio. com
To: flexcod...@yahoogro
ups.com
Sent: Thursday, March 5, 2009 7:55:01 PM
Subject: Re: [flexcoders] Module unload GC
Garbage Collection happens
when it needs to happen.  You have no control over it.  This is from
Grant Skinner's blog:
Deferred GC and Indeterminacy
A *very* important thing to understand about the Garbage Collector in FP9 is
that it's operations are deferred. Your objects will not be removed immediately
when all active references are deleted, instead they will be removed at some
indeterminate time in the future (from a developer standpoint). The GC uses a
set of heuristics that look at RAM allocation and the size of the memory stack
(among other things) to determine when to run. As a developer, you must accept
that fact that you will have no way of knowing when (or even if) your inactive
objects will get deallocated. You must also be aware that inactive objects will
continue to execute indefinitely (until the GC deallocates it), so code will
keep running (ex. enterFrames) , sounds will keep playing, loads will keep
happening, events will keep firing, etc. 
It's very

[flexcoders] Module unload GC

2009-03-05 Thread Claudiu Ursica
Hi,
I'm using a module in my app. And I'm profiling the app to see if unloading 
cleans after itself... The thing is the first time I unload nothing happens all 
the instances are still there in the Profiler. Now if I load the module again, 
the memory increases and the insatnces no. doubles. However when I unload the 
second time, the cleaning happens and I'm getting the memory and instances no 
from before the load. Is this normal, it looks to me like I'm having a module 
in there all the time after the first load... I'm pretty sure I do my internal 
cleaning OK before unloading the module, fact proved by the second, third forth 
load/unload 

Has anyone bumped into this? 
How reliable is the Profiler on this?

Any input is appreciated.

TIA,
Claudiu

  




Re: [flexcoders] Module unload GC

2009-03-05 Thread Nate Beck
Garbage Collection happens when it needs to happen.  You have no control
over it.  This is from Grant Skinner's blog:

*Deferred GC and Indeterminacy*
A *very* important thing to understand about the Garbage Collector in FP9 is
that it's operations are deferred. Your objects will not be removed
immediately when all active references are deleted, instead they will be
removed at some indeterminate time in the future (from a developer
standpoint). The GC uses a set of heuristics that look at RAM allocation and
the size of the memory stack (among other things) to determine when to run.
As a developer, you must accept that fact that you will have no way of
knowing when (or even if) your inactive objects will get deallocated. You
must also be aware that inactive objects will continue to execute
indefinitely (until the GC deallocates it), so code will keep running (ex.
enterFrames), sounds will keep playing, loads will keep happening, events
will keep firing, etc.

It's very important to remember that you have no control over when your
objects will be deallocated, so you must make them as inert as possible when
you are finished with them. Strategies to manage this will be the focus for
a future article.


On Thu, Mar 5, 2009 at 3:58 AM, Claudiu Ursica the_bran...@yahoo.comwrote:

   Hi,
 I'm using a module in my app. And I'm profiling the app to see if unloading
 cleans after itself... The thing is the first time I unload nothing happens
 all the instances are still there in the Profiler. Now if I load the module
 again, the memory increases and the insatnces no. doubles. However when I
 unload the second time, the cleaning happens and I'm getting the memory and
 instances no from before the load. Is this normal, it looks to me like I'm
 having a module in there all the time after the first load... I'm pretty
 sure I do my internal cleaning OK before unloading the module, fact proved
 by the second, third forth load/unload 

 Has anyone bumped into this?
 How reliable is the Profiler on this?

 Any input is appreciated.

 TIA,
 Claudiu

  




-- 

Cheers,
Nate

http://blog.natebeck.net


Re: [flexcoders] Module unload GC

2009-03-05 Thread claudiu ursica
I read this too, however when watching in profiler the gc runs a removes a set 
of the instances, the thing that bothers me is that after first load/unload the 
memory looks like the module is there. After the second load looks like 2 
modules are load I get duplicate instances ... After the second unload and 
forcing running gc a few times from profilet a set of instances is collected, 
but i still have the memory looking like I have one module in there. I don't 
get it how come that on set of instances are removed and one is there for 
good... It seems there is no way to see if my cleaning is actually hapenning 
... One could say is happening since the second, third, forth load/unload are 
actually cleaned but there's still a set of instances in the memory ... 







From: Nate Beck n...@tldstudio.com
To: flexcoders@yahoogroups.com
Sent: Thursday, March 5, 2009 7:55:01 PM
Subject: Re: [flexcoders] Module unload GC


Garbage Collection happens when it needs to happen.  You have no control over 
it.  This is from Grant Skinner's blog:


Deferred GC and Indeterminacy
A
*very* important thing to understand about the Garbage Collector in FP9
is that it's operations are deferred. Your objects will not be removed
immediately when all active references are deleted, instead they will
be removed at some indeterminate time in the future (from a developer
standpoint). The GC uses a set of heuristics
that look at RAM allocation and the size of the memory stack (among
other things) to determine when to run. As a developer, you must accept
that fact that you will have no way of knowing when (or even if) your
inactive objects will get deallocated. You must also be aware that
inactive objects will continue to execute indefinitely (until the GC 
deallocates it), so code will keep running (ex. enterFrames) , sounds
will keep playing, loads will keep happening, events will keep firing,
etc. 
It's very important to remember that you have no control over when
your objects will be deallocated, so you must make them as inert as
possible when you are finished with them. Strategies to manage this
will be the focus for a future article. 


On Thu, Mar 5, 2009 at 3:58 AM, Claudiu Ursica the_braniak@ yahoo.com wrote:

Hi,
I'm using a module in my app. And I'm profiling the app to see if unloading 
cleans after itself... The thing is the first time I unload nothing happens all 
the instances are still there in the Profiler. Now if I load the module again, 
the memory increases and the insatnces no. doubles. However when I unload the 
second time, the cleaning happens and I'm getting the memory and instances no 
from before the load. Is this normal, it looks to me like I'm having a module 
in there all the time after the first load... I'm pretty sure I do my internal 
cleaning OK before unloading the module, fact proved by the second, third forth 
load/unload 

Has anyone bumped into this? 
How reliable is the Profiler on this?

Any input is appreciated.

TIA,
Claudiu




-- 

Cheers,
Nate
 - - - -
http://blog. natebeck. net



   


  

Re: [flexcoders] Module unload GC

2009-03-05 Thread Nate Beck
Well if we're talking about modules...

If you're loading the same module over and over again that might be the
problem... A while back I had to modify ModuleLoader and while I was in the
code I seem to remember it has some caching built into it.  So it may be
possible that ModuleLoader is holding on to a reference of a module.

I got around the caching issue when loading the same module over and over
again by appending a random number to the loaded module.  (ex:
myModule.swf?uid=123456789).

The ModuleLoader stuff I was working on was back in 2.0.1... so it might be
very different now.

Hope this helps.

On Thu, Mar 5, 2009 at 10:08 AM, claudiu ursica the_bran...@yahoo.comwrote:

   I read this too, however when watching in profiler the gc runs a removes
 a set of the instances, the thing that bothers me is that after first
 load/unload the memory looks like the module is there. After the second load
 looks like 2 modules are load I get duplicate instances ... After the second
 unload and forcing running gc a few times from profilet a set of instances
 is collected, but i still have the memory looking like I have one module in
 there. I don't get it how come that on set of instances are removed and one
 is there for good... It seems there is no way to see if my cleaning is
 actually hapenning ... One could say is happening since the second, third,
 forth load/unload are actually cleaned but there's still a set of instances
 in the memory ...



 --
 *From:* Nate Beck n...@tldstudio.com
 *To:* flexcoders@yahoogroups.com
 *Sent:* Thursday, March 5, 2009 7:55:01 PM
 *Subject:* Re: [flexcoders] Module unload GC

  Garbage Collection happens when it needs to happen.  You have no control
 over it.  This is from Grant Skinner's blog:

 *Deferred GC and Indeterminacy*
 A *very* important thing to understand about the Garbage Collector in FP9
 is that it's operations are deferred. Your objects will not be removed
 immediately when all active references are deleted, instead they will be
 removed at some indeterminate time in the future (from a developer
 standpoint). The GC uses a set of heuristics that look at RAM allocation
 and the size of the memory stack (among other things) to determine when to
 run. As a developer, you must accept that fact that you will have no way of
 knowing when (or even if) your inactive objects will get deallocated. You
 must also be aware that inactive objects will continue to execute
 indefinitely (until the GC deallocates it), so code will keep running (ex.
 enterFrames) , sounds will keep playing, loads will keep happening, events
 will keep firing, etc.

 It's very important to remember that you have no control over when your
 objects will be deallocated, so you must make them as inert as possible when
 you are finished with them. Strategies to manage this will be the focus for
 a future article.


 On Thu, Mar 5, 2009 at 3:58 AM, Claudiu Ursica the_braniak@ 
 yahoo.comthe_bran...@yahoo.com
  wrote:

   Hi,
 I'm using a module in my app. And I'm profiling the app to see if
 unloading cleans after itself... The thing is the first time I unload
 nothing happens all the instances are still there in the Profiler. Now if I
 load the module again, the memory increases and the insatnces no. doubles.
 However when I unload the second time, the cleaning happens and I'm getting
 the memory and instances no from before the load. Is this normal, it looks
 to me like I'm having a module in there all the time after the first load...
 I'm pretty sure I do my internal cleaning OK before unloading the module,
 fact proved by the second, third forth load/unload 

 Has anyone bumped into this?
 How reliable is the Profiler on this?

 Any input is appreciated.

 TIA,
 Claudiu




 --

 Cheers,
 Nate
  - - - -
 http://blog. natebeck. net http://blog.natebeck.net



  




-- 

Cheers,
Nate

http://blog.natebeck.net


Re: [flexcoders] Module unload GC

2009-03-05 Thread claudiu ursica
I'll try that first thing in the morning...
For now I'm loading the same module, but in the future there will be more 
modules, however since we only have one now and still working on it we have to 
test with one module... The thing I fear the most if that the same thing will 
happen for different modules, and then I'll have a serious memory leak. The 
modules will be quite complex with lots of functionality and animations 
(diffren games loaded on the same shell), that's why cleaning is so important...

I was going to duplicate the module into another project to see if that still 
happens... Right now I'm nullifying manually the url of the module when 
unloading but whi knows what happens behind the scenes...









From: Nate Beck n...@tldstudio.com
To: flexcoders@yahoogroups.com
Sent: Thursday, March 5, 2009 8:16:52 PM
Subject: Re: [flexcoders] Module unload GC


Well if we're talking about modules...

If you're loading the same module over and over again that might be the 
problem... A while back I had to modify ModuleLoader and while I was in the 
code I seem to remember it has some caching built into it.  So it may be 
possible that ModuleLoader is holding on to a reference of a module.

I got around the caching issue when loading the same module over and over again 
by appending a random number to the loaded module.  (ex: myModule.swf? 
uid=123456789) .

The ModuleLoader stuff I was working on was back in 2.0.1... so it might be 
very different now.

Hope this helps.


On Thu, Mar 5, 2009 at 10:08 AM, claudiu ursica the_braniak@ yahoo.com wrote:

I read this too, however when watching in profiler the gc runs a removes a set 
of the instances, the thing that bothers me is that after first load/unload the 
memory looks like the module is there. After the second load looks like 2 
modules are load I get duplicate instances ... After the second unload and 
forcing running gc a few times from profilet a set of instances is collected, 
but i still have the memory looking like I have one module in there. I don't 
get it how come that on set of instances are removed and one is there for 
good... It seems there is no way to see if my cleaning is actually hapenning 
... One could say is happening since the second, third, forth load/unload are 
actually cleaned but there's still a set of instances in the memory ... 







 From: Nate Beck n...@tldstudio. com
To: flexcod...@yahoogro ups.com
Sent: Thursday, March 5, 2009 7:55:01 PM
Subject: Re: [flexcoders] Module unload GC


Garbage Collection happens when it needs to happen.  You have no control over 
it.  This is from Grant Skinner's blog:


Deferred GC and Indeterminacy
A
*very* important thing to understand about the Garbage Collector in FP9
is that it's operations are deferred. Your objects will not be removed
immediately when all active references are deleted, instead they will
be removed at some indeterminate time in the future (from a developer
standpoint). The GC uses a set of heuristics
that look at RAM allocation and the size of the memory stack (among
other things) to determine when to run. As a developer, you must accept
that fact that you will have no way of knowing when (or even if) your
inactive objects will get deallocated. You must also be aware that
inactive objects will continue to execute indefinitely (until the GC 
deallocates it), so code will keep running (ex. enterFrames) , sounds
will keep playing, loads will keep happening, events will keep firing,
etc. 
It's very important to remember that you have no control over when
your objects will be deallocated, so you must make them as inert as
possible when you are finished with them. Strategies to manage this
will be the focus for a future article. 


On Thu, Mar 5, 2009 at 3:58 AM, Claudiu Ursica the_braniak@ yahoo.com wrote:

Hi,
I'm using a module in my app. And I'm profiling the app to see if unloading 
cleans after itself... The thing is the first time I unload nothing happens all 
the instances are still there in the Profiler. Now if I load the module again, 
the memory increases and the insatnces no. doubles. However when I unload the 
second time, the cleaning happens and I'm getting the memory and instances no 
from before the load. Is this normal, it looks to me like I'm having a module 
in there all the time after the first load... I'm pretty sure I do my internal 
cleaning OK before unloading the module, fact proved by the second, third forth 
load/unload 

Has anyone bumped into this? 
How reliable is the Profiler on this?

Any input is appreciated.

TIA,
Claudiu





-- 

Cheers,
Nate
 - - - -
http://blog. natebeck. net






-- 

Cheers,
Nate
 - - - -
http://blog. natebeck. net



   


  

RE: [flexcoders] Module unload GC

2009-03-05 Thread Alex Harui
Modules will unload when there are no longer any references to the classes or 
objects in a module.  There is a cache, but it uses weak references and will 
release the module when using the gc button in the profiler.  The browser 
caches module SWFs but that won't affect this issue.  Nate's solution sounded 
like the solution to the problem where you update a module on the server and 
want to load the new one.

If a module brings in a component that hasn't been loaded before, usually it 
brings in a CSSStyleDeclaration for it as well which gets registered with the 
central StyleManager and pins the module.  You can check the id in the id 
column to see if the module that is pinned is the first one loaded.

Alex Harui
Flex SDK Developer
Adobe Systems Inc.http://www.adobe.com/
Blog: http://blogs.adobe.com/aharui

From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf 
Of claudiu ursica
Sent: Thursday, March 05, 2009 10:26 AM
To: flexcoders@yahoogroups.com
Subject: Re: [flexcoders] Module unload GC

I'll try that first thing in the morning...
For now I'm loading the same module, but in the future there will be more 
modules, however since we only have one now and still working on it we have to 
test with one module... The thing I fear the most if that the same thing will 
happen for different modules, and then I'll have a serious memory leak. The 
modules will be quite complex with lots of functionality and animations 
(diffren games loaded on the same shell), that's why cleaning is so important...

I was going to duplicate the module into another project to see if that still 
happens... Right now I'm nullifying manually the url of the module when 
unloading but whi knows what happens behind the scenes...





From: Nate Beck n...@tldstudio.com
To: flexcoders@yahoogroups.com
Sent: Thursday, March 5, 2009 8:16:52 PM
Subject: Re: [flexcoders] Module unload GC

Well if we're talking about modules...

If you're loading the same module over and over again that might be the 
problem... A while back I had to modify ModuleLoader and while I was in the 
code I seem to remember it has some caching built into it.  So it may be 
possible that ModuleLoader is holding on to a reference of a module.

I got around the caching issue when loading the same module over and over again 
by appending a random number to the loaded module.  (ex: myModule.swf? 
uid=123456789) .

The ModuleLoader stuff I was working on was back in 2.0.1... so it might be 
very different now.

Hope this helps.
On Thu, Mar 5, 2009 at 10:08 AM, claudiu ursica the_braniak@ 
yahoo.commailto:the_bran...@yahoo.com wrote:
I read this too, however when watching in profiler the gc runs a removes a set 
of the instances, the thing that bothers me is that after first load/unload the 
memory looks like the module is there. After the second load looks like 2 
modules are load I get duplicate instances ... After the second unload and 
forcing running gc a few times from profilet a set of instances is collected, 
but i still have the memory looking like I have one module in there. I don't 
get it how come that on set of instances are removed and one is there for 
good... It seems there is no way to see if my cleaning is actually hapenning 
... One could say is happening since the second, third, forth load/unload are 
actually cleaned but there's still a set of instances in the memory ...



From: Nate Beck n...@tldstudio. commailto:n...@tldstudio.com
To: flexcod...@yahoogro ups.commailto:flexcoders@yahoogroups.com
Sent: Thursday, March 5, 2009 7:55:01 PM
Subject: Re: [flexcoders] Module unload GC

Garbage Collection happens when it needs to happen.  You have no control over 
it.  This is from Grant Skinner's blog:

Deferred GC and Indeterminacy
A *very* important thing to understand about the Garbage Collector in FP9 is 
that it's operations are deferred. Your objects will not be removed immediately 
when all active references are deleted, instead they will be removed at some 
indeterminate time in the future (from a developer standpoint). The GC uses a 
set of heuristics that look at RAM allocation and the size of the memory stack 
(among other things) to determine when to run. As a developer, you must accept 
that fact that you will have no way of knowing when (or even if) your inactive 
objects will get deallocated. You must also be aware that inactive objects will 
continue to execute indefinitely (until the GC deallocates it), so code will 
keep running (ex. enterFrames) , sounds will keep playing, loads will keep 
happening, events will keep firing, etc.

It's very important to remember that you have no control over when your objects 
will be deallocated, so you must make them as inert as possible when you are 
finished with them. Strategies to manage this will be the focus for a future 
article.

On Thu, Mar 5, 2009 at 3:58 AM, Claudiu Ursica the_braniak