`

AS3中内存清理的若干解决方法

    博客分类:
  • AS3
阅读更多

书接上文,上文是很早的一篇文章了!不知道大家还记不记得!标题叫做“AS3中的内存泄露与垃圾回收”。在上一篇文章中,我们详细讨论了AS3的垃圾回收机制!令人沮丧的是,垃圾回收机不是很勤快!很多时候都会拖我们的后退!难道就这么心甘情愿的放任它不管吗!当然不行!我们有对策来解决这个问题。听我慢慢道来!

垃圾回收机制,一共有两种方法:“引用计数法”和“标识清除法”。对与这两种运行机制,我个人来说比较喜欢后一种。因为它简单明了,不会出现任何问题!但是,它会消耗很多CPU,所以就出现了垃圾回收机不定时运行的情况。那么处理方法很简单,我们只需要在需要的时候手动的启动一下垃圾回收机就可以了!那么怎么启动呢?这里就要提flash player的两个版本9.0和10.0.它们的处理方法略有不同!

首先说flash player9.0,在进行内存清理之前,你一定要保证你想清理的内存都不存在引用了!否则的话,下面就白费了!然后我们可以让fp发生一次运行时错误!为什么要这样呢?因为只要fp抛出运行时错误,那么fp就会执行一次垃圾回收机了!好了!知道了这个原理,就好办了!怎么弄呢?网上这段代码已经很多了!我再复制一次吧!

try{
new LocalConnection().connect(”GC”);
new LocalConnection().connect(”GC”);
}catch(error : Error){

}

这样就可以抛出一次运行时错误!垃圾回收机就执行了!达到我们的目的了!

但是,注意!这并非最好的做法。在你的正式项目中千万不要出现这样的语句!它会拖累你的程序的!虽然是一种解决方法,但严重不推荐在正式程序中使用!

下面来说说flash player10.0的做法!貌似ADOBE公司已经对这个问题产生了足够的重视。在fp10中我们已经有了一个非常非常专业的办法!看下面的语句你就明白了!

System.gc();

看到这个语句你会想到什么呢?兴奋吗?在FP10中有了一个专门的静态方法来强制执行垃圾回收进程!这个总比fp9的处理方法好吧!但是它也不是万能的!该方法只在fp10 debug版本和AIR debug版本AIR Debug Launcher (ADL) 中有效,同时在使用之前你也要确保要回收的内存已经不存在任何引用了!否则,你也是白费力气!经过测试,这东西确实令人兴奋!内存回收速度很好!

现在,大部分网民都安装了fp10的网页插件,所以不用担心版本问题,为了确保安全起见,你最好在你的程序初始化的时候检测一下用户的fp版本,如果用户是9的版本,直接让程序连接到adobe flash player的下载页面即可!

关于触发垃圾回收机就先说这么多吧!后面我们再讨论,在程序中,使用一些技巧,方便的管理我们的所有引用!

分享到:
评论

相关推荐

    内存管理内存管理内存管理

    中,那么操作系统将暂时停止您的进程,将其他内存转存到硬盘中,从硬盘上加载被请求的内存,然后再重新启动您的进程。这样,每个进程都获得了自己可以使用的地址空间,可以访问比您物理上安装的内存更多的内存。 ...

    操作系统(内存管理)

    并且,如果地址在硬盘上而不是在 RAM 中,那么操作系统将暂时停止您的进程,将其他内存转存到硬盘中,从硬盘上加载被请求的内存,然后再重新启动您的进程。这样,每个进程都获得了自己可以使用的地址空间,可以访问...

    Effective CSharp

    3. 使用is或as操作符代替类型转换。is和as操作符提供了一种更安全的类型转换方式,可以减少在转换失败时抛出异常的几率。 4. 使用条件属性而不是预处理器指令#if。条件属性可以在编译时根据条件来包含或排除代码,...

    百度 PHP工程师面试题和答案解析.doc

    A、在一个垃圾周期中,通过检查引用计数是否减 1,并且检查哪些变量容器的引用次数是零,来发现哪部分是垃圾 B、可以通过调用 `gc_enable()` 和 `gc_disable()` 函数来打开和关闭垃圾回收机制 C、通过清理未被使用的...

    oracle学习文档1

    - 实例由一组内存结构(如 SGA 和 PGA)和若干后台进程组成。 - **数据库**: - 数据库由一系列数据文件、控制文件和重做日志文件组成。 - **关系**: - 实例提供对数据库的访问途径,一个实例可以对应一个或多个...

    Java并发编程面试题(2022最新版)

    - **原因:** start()方法会启动一个新的线程,并在这个新线程中调用run()方法。直接调用run()方法是在当前线程中执行,不会创建新线程。 **Callable和Future** - **Callable:** 类似于Runnable,但支持返回值。 ...

Global site tag (gtag.js) - Google Analytics