很多高手、大神都曾经讲过“Flash Player垃圾回收机制”,但小弟不才,也想献上一篇“Flash Player垃圾回收机制”的文章,以供观赏。本人系AS3菜鸟一枚,文章有不足之处,敬请包涵理解。
很多新手都不太在意垃圾回收,常常没有将不用的对象删除等等,最终导致程序经常使CPU达到很高。其实大多数时候即使不在意垃圾回收程序也能照常运行,但其实这是对程序的不负责任。这也是阻止你走上更高层级的阶梯。
最近其实我也在思考AS3的未来,我的未来,但想通了一个道理,程序很多地方是想通的,学会了AS3,到了其他语言也是容易的(至少我是这么认为的)。
死神的烦恼
序章,奉天承运,天地诏曰:“神王见你看帖如此认真,特此封你为九幽大帝的死神使徒,你负责收割那些活着犹如死去的人的灵魂,使九幽大帝回归河蟹,使九幽大帝走上全民小康之路!”
第一章,“那些活着犹如死去的人的灵魂????”那到底什么养的人才算符合条件的呢?你百思不得其解,“死神也不好当啊!”你感慨道。
第二章,“故天将降大任于是人也,必先苦其心志……”,想到这里,你还怕什么呢?走起,收割灵魂吧!
第三章,你来到了一个位于某城市中央的高楼,看到了一位满腹肥肠的人坐在华丽的办公室中干着一些见不得人的勾当,你想了想,收了吧。“此人为世人所唾弃,为所有人所厌恶,此可算活着犹如死去。”如此这样,收割了325位这样的灵魂。你是不是感觉很爽,很过瘾!
第四章,你来到了一个医院,看到了一位基本只剩下了脑子还能活动,其他身体部位已经死去的人。你在犹豫是否要收割他的灵魂,但最终你没有下手,因为你看到了他卓越而伟大的思维(物理学、宇宙学、数学),这些都将是人类宝贵的瑰宝,不可剥夺,人们是需要他的。于是你明白了一个道理,那些不被人需要的人可以收割,于是《死神收割法则》第一条便诞生了:不被需要(引用)则为收割(引用计数法)。
第五章,收割在继续,你手中的灵魂已经到达了823位,神王对你的成绩表示还算努力,但力度不够、深度不够,还有很多人活着犹如死去。
第六章,你来到一个监牢,看到了一群犯人,他们因为贿赂了官员所以本该死去却仍然活着。他们感情极好,互为需要。他们不符合《死神收割法则》第一条,于是你准备前往下一个地方。但最终你还是收了他们,这些危害社会的人渣即使互为需要也要收割,于是第二条法则诞生了:即使互为需要,但不被这个充满爱的世界需要则收割(标识清除法)。
第七章,收割在继续,你手中的灵魂已经到达了9245位,神王对你的成绩表示很满意,但仍然有一类人可以收割你却没有收割,快去收割吧!
第八章,你重返人间,寻找着神王所说的那类人群,终于找到了,对了就是那类似男非女,似女非男的人,于是第三条法则便有了:违反天道轮回则收割(BitmapData.dispose)!
第九章,神界,神王对你的工作给予了32亿个赞,很好,很好,去管理更多的地方吧……
第十章(人间传说),由于死神的存在,人世间充满了正能量,人间一片繁荣气象。
第十章(天界传说),神王正式将这三条收割法则写入《死神法典》,并赐予你了至高无上的死神镰刀作为奖励。
第十章(冥界传说),冥王很不喜欢你,因为自从你的出现冥界的亡魂多了太多,于是和你约在紫禁之巅好好谈谈,自此后,冥王消失了、死神之王(你)也消失了……
程序猿的烦恼
程序猿们也遇到了这个问题,程序出现内存泄露,BUG,已经有851312位程序猿因为修改内存泄露BUG相继疲劳吐血而亡。
所以必须解决这个问题,于是他们想到了死神的传说,办法便有了。
好了,下面便是代码相关的知识。
1. 垃圾回收是什么?为什么要垃圾收回?
虽然这个问题很幼稚,但也值得一说,程序在执行的过程中不断地创建对象(数据),如果 Flash Player 不执行垃圾回收,很快内存就会爆满,然后程序崩溃(甚至电脑崩溃)。
不仅仅是AS3有垃圾回收,其他程序一样也是有垃圾回收机制的,只不过AS3的垃圾收回机制基本是自动的,不需要我们手动调用。
2. GC 是什么?
GC(Gabage Collection)就是强制执行垃圾收回,在AS3中有 System.gc() 静态方法可以让 Flash Plyaer 立即执行垃圾回收,但此方法仅限于 Flash Player 调试版和 AIR 应用程序(而且还有一些限制,具体查询API)。
其实Flash Player可以通过一些特殊方法(例如:如下代码),实现强制垃圾回收的效果。