AS3内存管理实用结论

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

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

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

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

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

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

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

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

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

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

未完待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值