ActionScript 3.0 :: Objects Not Being Garbage Collected?
Jul 21, 2009
I have checked and rechecked, and I do not know why these "buckets" aren't being killed when I run the reset menu function, a fresh set of eyes could really help.
i'm sure there are a lot of problems, but the only one I care about is destroying those buckets. inside the buckets, I have a listener for "removed from stage", and that kills all the listeners, etc, inside the buckets.
I was thinking about Flash GC the other day and came up with a question about how reference counting would work in the following 4 class scenario (assume GuiMain is the movie's document class):
I just noticed a strange behaviour while looking at my application in the Flash Profiler. When I click a button in my TitleWindow then the TitleWindow doesn't get garbage collected after it is removed. I have no idea why that is happening.[code]...
there is a Class A, it has a timer which updates its x position periodically. So all the instance of Class A will update their own x position. There is another Class B which extends Class A and overrides the function which updates position to change y position and call the trace function.
Now what I do now is create two instance alpha1, alpha2 of Class A and other two instance beta1, beta2 of Class B.
- alpha1 is only instantiated, but not added to the stage.
- alpha2 is instantiated, and there after added to the stage.
- beta1 is only instantiated, but not added to the stage.
- beta2 is instantiated, and there after added to the stage.
- let say after few seconds, I remove alpha2 and beta2 from stage.
Now suppose the GC fires collection, who all would be collected ?
private function fireItemCreated(data: ByteArray): void { setTimeout(function(): void { var event: ItemCreatedEvent = new ItemCreatedEvent(data); dispatchEvent(event); }, 1000); }
This function called to dispatch item created event when image thumbnail created.But it delays event on some time to prevent user interface freezes. And I'm guessing what could be happen if garbage collector executes after fireItemCreated function call but before timer event. Does the closure will be removed or it stays until it will be executed?
I'm trying to set up a test that will tell me whether a variable exists in memory or not. I'm running into the problem of my nested function preserving the local variable it uses, called "shouldBeDead". Here's my best effort, which doesn't work for me because the "shouldBeDead" variable is still alive[code]...
I recently posted on here about tweening in alphas of thumbnails that I was adding to a movieclip. It seems that the tween is getting garbage collected because not all of the thumbs fade in all the way. I have the tween defined outside of the function, but it is tweening a loader that is created within the function. Could this cause the tween to get garbage collected? if so, how do I fix it?
Here is the pertinent code:
var thumbTween:Tween; var my_thumb:Loader; function thumbLoaded(e:Event):void{
I have had a few complications with syncing the notes coming down, then I realized tweens would be the best way to go, so I chose them.The problem is; the notes come down the screen. If there is any lag in performance, any note that is on the screen freezes on the spot, and the new notes come down, and stay in sync.This is telling me it's something to do with the tweens. The timeOuts I have set work fine for spawning notes at the right time, but the tweens are freezing on occasion, Im guessing because the timer for the tween keeps going, but flash does not notice it.Here is the code for adding the notes:
Do not worry about the syntax of this code. Here is my concern - The loader object which is used to send the HTTP request and which has the onLoadComplete event registered to is not referenced from outside the loadSomeContent() function. Is there a possibility that the loader object will be garbage collected and loadCompleteHandler() will never be called?
I'm developing a touchscreen application in AS3, and I havesome problems because the applications reaches 1,5 Gigabyte ofmemory if it's keep running for an hour.this memory size is because I show some videos in streaming,one after another (not in the same), and then they are not garbagecollected: I set the references to the videos to null and I removethe listeners, but flash seems to keep them in memory. I tried todelete the code section about the videos, and I have no problemswith memory (I also load some external images with the videos), soI'm pretty sure they're guilty in some way...I read that there's a bug in flash so displayobjects are notgarbage collected even if you remove the pointers to them: is it
May I know what is the proper way to keep track of display objects created and hence allow me to remove it efficiently later, for garbage collection. For example:
for(i=0; i<100; i++){ var dobj = new myClass(); //a sprite addChild(dobj);
I've been in a trouble with "removeChild" for a while. I know there must be some great discussion around but just could not find some nice posts in details.
I'm forgetting now exactly how I should dispose of unneeded objects. In the past, every object/class I created had a public dispose() function which removes all added listeners inside it and called the kill/dispose function on any children of it that may need the same (so it worked its way down the tree, as this process can continue for as many children/grandchildren there are in the list). So basically, the code in the parent class would look like this:
Code: childObj.removeEventListener(MouseEvent.MOUSE_DOWN, anotherHandler); childObj.dispose(); childObj = null; ...and the childObj class would look like this: [Code] .....
Do I need to set any variables/objects defined in the child class's class scope to null prior to setting the class itself to null? Or is this handled automatically when I set the class itself to null from the parent (assuming these class-scope-defined variables/objects have no listeners or child objects which need to be disposed themselves)?
This is the situation: I am trying to build an uploader that will take data collected earlier in the form before the upload occurs and then rename the uploaded file with it. I've gotten the upload itself to work, but thus far I have no luck getting any sort of renaming to work, not even by PHP. I tried Loadvars to transfer the variables over and rename it during upload, yet it says "NO" and rejects the post variables when the upload occurs. I even tried loading the variables into an external file and transfering them back to the uploader via cookie, all at the same time. Again it says "NO!", and the file is uploaded as __"filename".jpg. This is my code thus far:
I've got a custom component (quite complex so I can't post any code here, although that shouldn't matter), that I can add to a view. When the component is deleted from the view or the view is switched I call my own dispose method which removes remaining eventListeners and kills some references so that the component can eventually be nulled and collected by the GC.
All that works perfectly fine until I add a Spark TextInput to the MXML part of the component (it took me hours to find out what is preventing the component to be collected!), so I recon that the TextInput somehow automatically adds some eventListeners.
My question is what are these listeners, or is there anything else I haven't thought of?
It is known that a display Object removed from the display list will be garbage collected only if any event listener associated with it is removed.What I would like to know, but could not anywhere find an answer to, is that for a class that we create which extends, say Sprite, and uses and manipulates various other display elements within it, while removing an instance of this class from the display list is it sufficient to remove the event listeners associated with the instance of the class, or do we necessarily have to remove all internal event listeners of the class definition associated with the display objects that the class uses and manages.
I have ship game that i create using falsh as3. but i have the problem with memory usage. the memory usage still increase when game played. whereas the System.gc was called, but the memory still increase.
I understand that Objects not referenced by anything are garbage collected, and have been making sure to null out referenced to objects when I'm done with them. What I want to know are a few things:Do only Objects need to be null-referenced?How often does garbage collection usually run? Does it tend to run when processor demand is low? Is there a way I can tell garbage collection to run manually, such as when I'm done with a playing field full of sprites? This is not really needed if garbage collection tends to run when processor use is low, since it will run anyway at the times I'd like it to.Objects created just for the scope of an if or for statement etc, unless they are assigned a reference elseware, are eligible for garbage collection, right?
I have a question about garbage collection: I am using a MVC pattern for a photo gallery website.Every view displays a thumb viewer/controller and an image loader. Each view extends an abstract class that has a close() method that looks like this
PHP Code: //AbstractViewer class public function close():void {
I am creating a bunch of movieclips when I first start the flash movie.I then put them into an array and use functions to add and remove them by selecting a random index in the array.When they are removed are they marked for garbage collection?Or can I just keep creating them.Might be hard to understand so code is below
var mc1:mov1 = new mov1(); var mc2:mov2 = mov2(); var mc3:mov3 = mov3(); var mc4:mov4 = mov4();
var theRandomClip:Number; var movieClipArray = new Array(mc1,mc2,mc3,mc4)
function getRandom():void{ theRandomClip = Math.floor(Math.random()*movieClipArray.length); addChild(movieClipArray[theRandomClip]); }
function remove():void{ removeChild(theRandomClip); } //Then I would call them in succesion many times
getRandom(); remove(); getRandom(); remove();
//etc do I need to worry about them getting garbage collected and no //longer being available?
No matter what I do I cannot solve a tween AS3 Garbage Collection problem I am having that is wreaking havoc on my tween instances working correctly/consistently. Some Sprites never tween at all, some do but only part way. And it effects different ones almost each time.
I have read a fair amount recently on AS3 Garbage Collection and improperly referenced Tweens and other asynchronous instances getting picked up in mid process. I am experiencing the signature inconsistent behaviour that the I have read of.
I have tried using class level Static and non static properties to store references to my Tween instances so they will not be marked for GC. No luck. I have placed references to them in Class level Arrays, I have also used TweenMax's static to() Method that insures that it will shield it from GC and its alt. non Static constructor instantiation, with persist:true. I also implemented another custom package; GCSafeTween(), other users said it does as it should, but it's not working in my case.
To test the GC problem, I edited the two eventListerners() in the Adobes' fl.transitions.Tween so that their default weakReference property was false. Doing this made the Tween work correctly. But that's a terrible solution.
A flash file loads a swf that has flash video using a loader request, which once loaded, wont unload and slows things unbearbley. I understand that once unloaded the flv will keep playing until Flash disposes of it.