蜗牛风采网

登录

flash插件是什么 flash8

admin 举报

flash插件是什么 flash8

-!

有“参考计数法”和“明码标价法”两种操作模式。

引用计数通过计算指向对象的引用数来确定是否清除该对象。如果一个对象的引用数为0,表示程序不能再访问该对象,则清除,如果引用数不为0,则不清除。这种方法运行成本较低,但不能清除循环引用关系的对象集合。标记-清除方法是从程序的根对象遍历每个引用所指向的对象。遍历经过的对象并标记它。最后,清除所有未标记的对象。这种方法比较彻底,但是运行成本高。

运行GC的时间不是固定的。它会根据你的内存使用情况来决定运行GC的时间。它会根据用户机器的内存值设置一个阈值,然后将程序占用的内存保存在阈值附近。

详见文章“理解nflashplayer 9中的垃圾收集”。

由于FlashPlayer的“不确定”GC机制,我们要做的主要任务就是保证创建的对象在不需要的时候可以释放。确保对象可以被释放的主要原则是没有外部引用指向该对象,除非外部引用没有设置为空。一般情况下,以下情况也会导致对象不被释放

1.remove不监听任何事件。比如A对象监听一个事件,监听函数EventHandler存在于B对象中,这就意味着A对象会保存一个B对象方法的引用,导致B对象的内存无法释放。

解决方法是在调用addEventListener时移除监听事件或将监听函数设置为弱引用,但此方法只适用于一次性监听。

2.使用BindingUtils.bindSetter()和ChangeWatcher.watch()绑定对象后,绑定不会被清除。道理和1一样。事实上,绑定一个对象意味着监听它发送的PropertyChange事件。

解决方法是使用ChangeWatcher.unwatch()清除绑定关系。

3.声明样式并在样式中使用嵌入的资源。例如,样式名称在mx:Style标记中定义。为对象定义样式相当于向外部世界声明一个全局可用的样式,因此它可能导致对象的引用被保存在外部,这可能导致对象不被释放。

解决方案许多解决方案可以使用动态加载的样式,或者使用类或模块来专门管理样式。这些解决方案取决于程序的架构设计。

4.用ExternalInface.callBack()声明外部API函数。类似于情况1,当一个对象在外部声明API时,对该对象的引用保存在外部。

解决方法:如果之前已经用externalinfiace . callback(API name,functionname)声明了API,可以用externalinfiace . callback(API name,null)取消API。

5.有些控件类似于文本输入,或者由这些控件组成的自定义组件不能被释放,即使这些控件从显示列表中删除并且引用这些控件的对象被删除。这个问题别人也提出过。是Bughttp://bugs.adobe.com/jira/browse/SDK-14781.这个问题大概和flash的焦点管理机制有关。

目前的解决方案是等待焦点转移到其他控件上,比如点击其他控件,这样就可以通过GC释放之前的控件对象。

zx.WnFcW。cn

我们应该什么时候准备垃圾清理?之前有文章说要听组件的removeFromStage事件,在其处理方法中进行垃圾清理准备。清除引用,删除监听器,清除绑定关系,取消外部API。

其实这个方法不太准确。因为当组件从显示列表中移除时,会发送removedFromStage事件,所以这并不意味着组件对象的生命周期已经结束。只要程序保留了组件对象的引用,就可以再次将组件对象添加到DisplayList中。此时,组件对象将发出addedToStage事件。如果您只是在removedFromStage事件的侦听器函数中准备对象的垃圾清除,组件对象的原始状态可能会被破坏,并且在组件被重用时无法使用。

因此,更好的做法应该是在removedFromStage中使用addedToStage,两个事件之间的对应关系。在removedFromStage事件的处理方法中准备垃圾清理。清除引用、删除监听器、清除绑定关系、取消外部API等。并在addedToStage事件的处理方法中执行removedFromStage事件的处理方法的反操作。设置引用,添加监视器,设置绑定关系,设置应用编程接口.也可以看作是组件对象的初始化操作,可以保证组件对象从DisplayList中移除后可以释放相应的内存,如果保存其引用并重新添加到DisplayList中,则可以重用。

最后,翻译一个关于内存清理的建议

zx.WnFcW。cn

flash插件是什么 flash8

原文

1 . usageofinstancemembersinsteadofstaticmemberscaneasilyetedtectwiteprofiler(在可能的情况下替换为staticmembers)

2.usageofweakreferencesand/orremovalofeventList

enersafterconsumptionoftheevent(ifposible)helpsreducingthememoryusage

3.moduleLoader.unloadModuleleaksmemory,usemoduleLoader.urlnullinstead

4.modulememoryisfreedatarbitrarytimes(notatunload)

5.runnningdebugversionofmodulesleakshugeamountsofmemorynomatterwhichcontainerisused

zx.WnFcW。cn

6.declaringmodulesasmodulesintheconfigurationofaflexbuilder3project(andnotasapplicationslikeinFlexBuilder2)andoptimizingforaspecificapplicationreducesmodulesizedrastically

7.forcinggarbageCollection(doubleLocalConnection.connecthack)isnecessaryinordertomeasureleaksandtokeepmemoryundercontrol

zx.WnFcW。cn

8.usethereleaseversionofthemoduleswf

9.uninstallthedebugflashplayer(uninstall_flash_player.exe)

zx.WnFcW。cn

10.installthereleaseversionoftheflashplayer(install_flash_player_active_x.msi)

以下是翻译内容

1.使用实例成员(instancemembers),而不是用静态成员(staticmembers),可以更容易地被profiler检查到.因此,尽可能地使用实例成员,而不要用静态成员.

2.在事件完成之后,将其设为引用而且/或者(and/or)将其remove掉,有助于减少内存使用.

3.moduleLoader.unloadModule()会导致内存泄露,因此建议使用将moduleLoader.urlnull.

4.module内存的释放时间是不确定(并不是在unload的时候).

5.使用debug版本的module会导致大量的内存泄露,不管其容器是否使用.

6.将一个程序块声明为module,而不要将其声明为application,并且设置各module专门为一个application进行优化,能大量节约内存.

7.在适当的时候,为了内存可控,可强制使用垃圾收集器(garbageCollection).方法如下:

try{

importflash.net.LocalConnection;

varconn1:LocalConnectionnewLocalConnection();

varconn2:LocalConnectionnewLocalConnection();

conn1.connect(gc

conn2.connect(gc

}catch(e:Error){}

8.使用release版的moduleswf.

9.卸载debug版的flashplayer.

10.安装release版的flashplayer.

参考文档

1.UnderstandinggarbagecollectioninFlashPlayer9http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html

2.FLEX内存释放优化原则http://xinsync.xju.edu.cn/index.php/archives/1825

3.GarbageCollectionandMemoryLeakshttp://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html

4.memoryleakwhenusingTextInputandTextAreawhenclickthekeyboardhttp://bugs.adobe.com/jira/browse/SDK-14781

相关阅读

  • flash闪存是内存还是外存 flash内存贵
  • 西数另类复活slc 96层堆栈XL
  • 2018年内存产业dram 图
  • 2020年被“埋没”的16gb内存手机 今年或将爆发
  • 单flash内存相关文章最新报道片机rom与ram的主要区别 ram和flash区别
  • flash内存相关文章最新报道
  • flash内存相关文章最新报道
  • 单flash内存相关文章最新报道片机rom与ram的主要区别 ram和flash区别
  • flash插件是什么 flash8
  • 标签: #flash内存相关文章最新报道