我来解释下为什么LocalConnection可以实现垃圾回收.
其实LocalConnection与垃圾回收是没有直接关系的.
这个做法的原理在于垃圾回收的时间尽管不确定,但是,只要程序抛出错误,就会运行一次垃圾回收器.这里使用LocalConnection两次connect同一个连接,第二次将发生运行时错误(#1034,LocalConnection已经连接上).于是就报错了.垃圾回收器自动运行.
至于为什么网上流传的版本都是LocalConnection,我个人觉得,可能是因为这个LocalConnection在AS3的应用中相对比较少出现,而且跟其他代码相比,这个运行时错误不容易与其他代码发生冲突.
//
我的方法在我的程序上测试过,在相同的内存申请中,第一次调用gc()后,内存好像没有被释放,但第二次进行相同的内存申请却并没有增加内存的用量,CPU使用也相对稳定,可以这样说,系统的确是回收了垃圾,但没有直接把回收的内存交还给操作系统,所以在第二次申请中内存用量没有上升。
而在没有用gc()的情况下,每调用一次都会增加内存用量,CPU占有也随之提高。
//
LocalConnection以及System.totalMemory这样的东西。
都是封装在底层的实现中。
如果是windows有相应的C++底层实现,官方没有公开这个资料自然也没有说明,不然就不叫Hack
但是我觉得这是一个不稳定的做法,因为针对不同的系统,相对的底层实现也不同。
本文转自jiahuafu博客园博客,原文链接http://www.cnblogs.com/jiahuafu/archive/2009/11/05/1596404.html如需转载请自行联系原作者
jiahuafu