2011-02-14 46 views
1

我一直在试图追踪我们的应用程序中的内存泄漏,并继续发现自己回望Spark元件作为罪魁祸首。火花内存泄漏

我想我已经找到了原因,但是我对垃圾收集的理解/ mark &不是太热,所以我想验证我的发现。

Spark中的许多类使用RichEditableText来显示其文本属性(ComboBox,TextInput)。

RichEditableText有一个本地textContainerManager属性,并经常在这个电话compose()

下面是TextContainerManager

// Line 282 - 292: 
    static private var stringFactoryDictionary:Dictionary = new Dictionary(true); 
    static private function inputManagerStringFactory(config:IConfiguration):StringTextLineFactory 
    { 
     var factory:StringTextLineFactory = stringFactoryDictionary[config]; 
     if (factory == null) 
     { 
      factory = new StringTextLineFactory(config); 
      stringFactoryDictionary[config] = factory; 
     } 
     return factory; 
    } 
// Line 1204: 
public function compose() { 
    // Line 1238: 
    var inputManagerFactory:TextLineFactoryBase = (_sourceState == SOURCE_STRING) ? inputManagerStringFactory(_config) : _inputManagerTextFlowFactory; 
    // Line 1242: 
    inputManagerFactory.swfContext = Configuration.playerEnablesArgoFeatures ? this : _swfContext; 
} 

行相关删节提取物1242是关键的线在这里,因为它提供了静态字典给我们组件的引用。 (注意 - 我已经用调试器检查了这一点,以确认三元组的哪个分支被执行。)这将阻止实例被垃圾收集。

例如:静态字典有一个引用实例的值 - 实例不能是GC'd。

反过来,这将防止任何其他引用TextContainerManager实例的实例也被GC'd。

尽管这个理论与我在应用中看到的一致,但我不能相信在这样的低级别spark组件中确实存在内存泄漏。

有人可以请说明这一点吗?

顺便说一句 - 我已经开了bugs.adobe.com缺陷跟踪这个问题,它应该被证明是一个真正的错误: https://bugs.adobe.com/jira/browse/SDK-29531

+0

票你diff'd 4.1和4.5之间TextLayoutManager,看看有什么变化了? – 2011-02-18 17:14:37

回答

0

我听说有相关的TLF几个内存问题。 这应该在Flex 4.5 SDK中纠正。

在此期间,你仍然可以打开http://bugs.adobe.com/jira/

+0

已经打开一个(对不起,应该在帖子中提到这个!) – 2011-02-14 17:56:02