as3.0垃圾回收机制.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
as3.0垃圾回收机制

ActionScript 3.0 垃圾回收的辅助方法2011-11-01 16:56package org.managers{import .LocalConnection;import flash.system.System;public class GCManager{/*** 多少秒回收一次?*/private static const INTERVALSECOND:int = 300;private static var per:int = 0;public static function start():void{TimerManager.attachTimer(timerHandler);}public static function stop():void{TimerManager.detachTimer(timerHandler);}private static function timerHandler():void{if(perINTERVALSECOND){per++;return;}per = 0;//回收内存try?{?//System.gc();var lc1: LocalConnection = new LocalConnection();?var lc2:LocalConnection = new LocalConnection();?lc1.connect( gcConnection );?lc2.connect( gcConnection );?}?catch (e:Error) ?{?}}}}?以上代码,看不出来吧?正常,这是种辅助方式让Flash封装的,不对外开放的GC强制去回收一次垃圾。但不稳定。?Flex的垃圾回收机理及预防内存泄露本文链接:/wwwanq/blog/itemee9f346935807ea.html本文主要通过对互联网上的一些资料进行收集和整理,然后结合自己做的一些试验写出,未必全面准确,欢迎改正或者补充。内存问题一直是程序员比较关心的问题,每个程序员都希望自己开发的程序足够健壮,在运行过程中不会因内存泄露而导致程序运行变慢或者崩溃。现在,较新出现的面向对象语言(比如Java)增强了内存管理机制,能够自动回收不被使用的内存,或者说能够回收垃圾内存,这种内存管理机制通常被称为“garbage collection(垃圾回收)”,简称GC。Flex开发中所使用的ActionScript语言,简称AS,也是支持GC的一种语言,经过编译后的AS代码运行在AS虚拟机(简称AVM)中,由AVM自动完成垃圾内存回收的工作。Flash Player 就是一个AVM,所以有时候我们将二者混为一谈。既然AVM能够自动完成垃圾回收的功能,那么是不是Flex程序员就可以认为所开发的Flex应用不存内存泄露问题呢?答案是否定的。在某些情况下,处理不妥当的代码仍然会导致内存泄露。如何才能避免内存泄露?应该说,AS程序员在清楚了解Flash Palyer垃圾回收的基本原理,并且高度重视内存泄露这个问题才能有效避免内存泄露情况的发生。Flash Player垃圾回收机制Flash Player垃圾回收工作是由垃圾回收器(garbage collector)完成的。垃圾回收器是运行在后台的一个进程,它释放那些不再被应用所使用对象所占用的内存。不再被应用所使用的对象是指那些不再会被那些活动着(工作着)的对象所“引用”的对象。在AS中,对于非基本类型(Boolean, String, Number, uint, int)的对象,在对象之间传递的都是对象引用,而不是对象本身。删除一个变量只是删除了对象的引用,而不是删除对象本身。一个对象可以被多处引用,通过这些不同的引用所操作的都是同一个对象。通过以下两段代码可以了解基本类型和非基本类型对象的差异:基本类型的值传递:private function testPrimitiveTypes():void{var s1:String=abcd; //创建了一个新字符串s1,值为abcdvar s2:String=s1; //String是基本类型,所以创建了一个新的字符串s2,s2的值拷贝自s1。s2+=efg; //改变s2的值s1不会受影响。trace(s1:,s1); //输出abcdtrace(s2:,s2); //输出abcdefgvar n1:Number=100; //创建一个新的number,值为100。var n2:Number=n1; //Number是基本类型,所以又创建一个新number n2,n2的值拷贝自n1。n2=n2+100; //改变n2对n1不会有任何影响。trace(n1,n1); //输出100trace

您可能关注的文档

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档