flex内存
- 作者: Zoo你好
- 来源: 51数据库
- 2020-09-24
我查看了一下官方的文档,因为IModuleInfo的load方法只是加载模块,而不是创建模块的实例。如果你在其他地方使用ModuleLoader标签或者通过_info创建模块的实例了,模块也不能别完全卸载,而只是作为垃圾回收的对象。
但是,对于垃圾回收,有个问题。
1、垃圾的回收不可预知。(调用MemoryUtils.gc();方法并不一定会触发垃圾回收)
2、只有在请求内存的时候才会触发垃圾回收,而不是在删除对象引用时。
另外,对于你的代码,你可以确认一下,对于同一个module来说,你是否调用的是同一个类实例(上面你贴出的这些方法所在的类)的load和unload方法,且该类实例是否被其他对象长期持有?
在调用_info.unload();方法前,调用_info.release()方法将当前的引用释放到模块中。
总的来说,你一定要确保该对该模块实例的引用、对_info的引用确实已经都删除了,才能真正的完全卸载模块。 (样式、时间这些都可能导致你不能正常卸载模块,详细的请查看参考资料。)
但是,对于垃圾回收,有个问题。
1、垃圾的回收不可预知。(调用MemoryUtils.gc();方法并不一定会触发垃圾回收)
2、只有在请求内存的时候才会触发垃圾回收,而不是在删除对象引用时。
另外,对于你的代码,你可以确认一下,对于同一个module来说,你是否调用的是同一个类实例(上面你贴出的这些方法所在的类)的load和unload方法,且该类实例是否被其他对象长期持有?
在调用_info.unload();方法前,调用_info.release()方法将当前的引用释放到模块中。
总的来说,你一定要确保该对该模块实例的引用、对_info的引用确实已经都删除了,才能真正的完全卸载模块。 (样式、时间这些都可能导致你不能正常卸载模块,详细的请查看参考资料。)
推荐阅读
