欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

as3内存储器管理实用结论

更新时间: 2014-05-12 16:15:46 责任编辑: Author_N1

 

AS3内存管理实用结论

本文由 周戈 (DarkStone) 个人原创编写, 转载请写明来源!
联系方式: DarkStone@163.com

以下是我做的众多实验中的一小部分实验结论, 以后我会慢慢扩充

01. 如果 ABC 类里所有监视器方法都是成员方法, 那么即使 ABC 类实例的内存在用完以后被完全孤立, ABC 类实例内存当中, 所有成员索引映射的内存不会被自动回收, 所有局部索引映射的内存会被自动回收

解决办法: 将 ABC 类里所有成员索引在用完以后映射到 null, 而局部索引不用处理, 注意, 回收这些内存跟你最终是否移除事件监视器没有关系

02. 如果 ABC 类里监视器方法有一个是局部方法, 那么即使 ABC类实例的内存在用完以后被完全孤立, ABC 类实例内存当中, 所有成员和局部索引映射的内存都不会被自动回收

解决办法: 将 ABC 类里所有成员和局部索引在用完以后全部映射到 null, 注意, 回收这些内存跟你跟最终是否移除事件监视器没有关系

03. 如果一个类实例的内存已经被完全孤立, 但它没有被自动回收, 那么, 这块内存依然可以继续"工作", 意思是, 这个类里的方法还可以持续执行, 一旦这块内存被强制回收, 这块内存就不存在了, 它先前的"工作"也立即停止了

04. 如果一个局部方法(不管镶套了多少层), 有机会被调用, 那么这个局部方法对应的内存空间会自动往上进行内存重新连接, 一直重连到局部方法所在的成员方法对应的那个内存空间(其间穿越了很多代码块)

05. 任何一个内存空间都不属于其它的内存空间, 它只能被另一个内存空间里的索引映射着, 从而产生连线, 但因为这些连线是有可能被断开的, 一旦全部断开, 此内存空间就被孤立, 所以内存空间不属于也就是不包含在任何其它的内存空间里. 唯一可以属于内存空间的, 是内存空间里所有的非动态索引(因为动态索引可以被 delete 掉, 所以它不会永久属于内存空间), 而非动态索引则包括所有的成员索引和局部索引(局部索引所在的代码块虽然会在方法执行完毕以后断开, 但如果该方法被再次调用, 内存将重新连接, 这些局部索引就又连到内存空间了)

06. 内存空间当中的大量索引, 其实不占物理内存, 真正占用物理内存的, 是那些最终映射的内存, 也就是常量内存, 常量内存里是一些原始类型, 比如数字, 字符串, 布尔值等等

未完待续...

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-05-12 16:15:46
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/112946/
本文WWW.DOC100.NET DOC100.NET版权所有。