[AS3] Garbage Collection - Memory Leak? Help!

I’ve written some code that creates a bunch of star effects, and what I think will free them up for garbage collection when I’m done with them.
When I destroy them individually, my ram usage holds a steady 51%, just slightly above a blank frame.

When I let them build up, till ram usage is at 68% or so, however, and delete them all at once, the ram usage goes down to 62%, a significant difference.
So my questions are these:

  • Am I freeing all the objects/references/listeners ect. properly and allowing them to be GC’d? Or do I have a memory leak?
  • Is there anything else wrong with the way I’ve written the code?

Main Timeline: Frame 1

stop();
import flash.display.*;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.filters.GlowFilter;
import Preloader.plLoadingBar;
import Preloader.plSpeedLoader;
import Preloader.plSpeedLoaderBall;
import Preloader.Loading;
import Effects.starEffect;

stage.showDefaultContextMenu = false;

var plStarEffectArray:Array = new Array() //an array to hold the star instances' IDs in

var newEnterFrameFunction:Function = function onenterframe():void { //anon function (so onEnterFrame can be used in frame 2, 3 ect.)
            
        for(var aaa:Number = 0; aaa < 200; aaa++) {
            var star:starEffect = new starEffect(plStarEffectArray.length); //create a new star
            addChild(star);
            star.x = Math.random()*520-10;
            star.y = 640-70;
            plStarEffectArray.push(star); //put it into the array
            star = null; //delete the reference
        }
    }

addEventListener(Event.ENTER_FRAME, newEnterFrameFunction); //add the listener for the anon function

function destroy_starEffect(starID:Number = 0, NUKE:Boolean = false):void {
    if(NUKE == false) {
        plStarEffectArray[starID].destroy(); 
        removeChild(plStarEffectArray[starID]);
        plStarEffectArray[starID] = null;
    } else {
        for(var i:Number = 0; i <= plStarEffectArray.length-1; i++) {
            if(plStarEffectArray* != null){
                plStarEffectArray*.destroy(); // systimatically remove references, listeners, filters from stars
                removeChild(plStarEffectArray*); //kill the stars
                plStarEffectArray* = null;
            }
        }
        plStarEffectArray = null;
    }
}


function CleanUp():void {
    removeEventListener(Event.ENTER_FRAME, newEnterFrameFunction);
    
    destroy_starEffect(0,true);

    
}

Class starEffect

package Effects {
    
    import flash.display.*;
    import flash.filters.GlowFilter;
    import flash.filters.BlurFilter;
    import flash.events.Event;
    
    public class starEffect extends MovieClip {
        
        var size1:Number;
        var colour:Number;
        var str:Number;
        var size2:Number;
        var speed:Number;
        var myID:Number;
        
        var glow:GlowFilter;
        var blur:BlurFilter;
        
        public function starEffect(idNum:Number) {
            myID = idNum;
            if(Math.round(Math.random()*3) == 1) {
                size1= (Math.random()*14)+1;
                size2 = (Math.random()*2)+0.25;
                scaleX=size2;
                scaleY=size2;
                str = (Math.random()*10)+5;
                if(Math.round(Math.random()*3) == 1) {
                    colour = (Math.random()*16777215);
                } else {
                    colour = 16777215;
                }
                speed = (Math.random()*5)+3;
            } else {
                colour = 16777215;
                size1= (Math.random()*5)+1;
                size2 = (Math.random()*0.8)+0.15;
                scaleX=size2;
                scaleY=size2;
                str = (Math.random()*7)+3;
                speed = (Math.random())+0.5;
            }
            
            
            glow = new GlowFilter(colour,1,size1,size1,str,3,false,false);
            blur = new BlurFilter(size2+1,size2+1,3);
            filters = [glow, blur];
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
        
        private function onEnterFrame(event:Event):void {
            
            if(y > 650 || y < 200){
                speed = -speed;
            }
            
            y += speed;

        }
        
        public function destroy():void {
            removeEventListener(Event.ENTER_FRAME, onEnterFrame);
            glow = null;
            blur = null;
            filters = null;
        }
    }
    
}