Ваша String
не может быть собрана, поскольку новый экземпляр не создан, но значение берется из пула констант, который заботится о String
, Number
, int
и т. Д.
Если вы создаете новые Class
, Object
, Array
и т. Д. ... их можно собирать, и вы можете отследить их простым способом: поместить свой экземпляр в качестве слабого ключа в словарь.
Таким образом, когда происходит сбор мусора, ключ будет удален из словаря.
Вот пример кода для тестирования и живой код: http://wonderfl.net/c/uP5T:
import flash.utils.Dictionary;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.system.System;
var notGC:Dictionary=new Dictionary(true)
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown)
function traceNotGC():void{
var cnt:int=0
for (var key:Object in notGC) {
cnt++
trace("not garbaged : " + key)
}
if (cnt==0) trace("All garbaged")
}
function onKeyDown(e:Event):void{
System.gc()
traceNotGC()
}
function test():void{
var str:String="not dead" // string taken from the constant pool
// there is no allocation done
var obj:Object={foo:"bar"} // creation of a new object that can be garbaged
var arr:Array=[0,1,2] // creation of a new array that can be garbaged
notGC[str]=true
notGC[obj]=true
notGC[arr]=true
traceNotGC()
}
test()