Apache flex Flex应用中的内存泄漏

Apache flex Flex应用中的内存泄漏,apache-flex,memory-leaks,blazeds,Apache Flex,Memory Leaks,Blazeds,我的Flex应用程序面临内存泄漏。 Flex应用程序是大型web应用程序的一部分(其中包含各种技术) 当Flex应用程序每5秒从服务器调用一次刷新轮询时,就会发生内存泄漏 事实是: 我正在使用AMFChannel建立连接。投票是错误的。每次刷新都会创建新的AMFChannel实例 服务器端是BlazeDS,在我的web应用程序中作为servlet运行 内存泄漏发生在IE和FireFox上。它在Chrome上根本不会出现 一个晚上,IE内存增加了数百MB,最终崩溃 在Flex中,内存确实会增加,

我的Flex应用程序面临内存泄漏。 Flex应用程序是大型web应用程序的一部分(其中包含各种技术)

当Flex应用程序每5秒从服务器调用一次刷新轮询时,就会发生内存泄漏

事实是:

  • 我正在使用AMFChannel建立连接。投票是错误的。每次刷新都会创建新的AMFChannel实例
  • 服务器端是BlazeDS,在我的web应用程序中作为servlet运行
  • 内存泄漏发生在IEFireFox上。它在Chrome上根本不会出现
  • 一个晚上,IE内存增加了数百MB,最终崩溃
  • 在Flex中,内存确实会增加,但速度要慢得多。一夜之间 将增加30MB
  • 使用Flex profiler,我发现增加的内存与 AMF频道
  • 我试图将AMFChannel requestTimeout设置为60秒。它什么也没做
  • 我试图将BlazeDS连接超时时间设置为60秒。没有什么变化。但我不确定我做得是否正确
到目前为止,我的结论是:

  • AMFChannel实际上是从浏览器获取连接。在Flex中,AMFChannel消耗的内存很小,而在浏览器中,它消耗的内存要多得多。这解释了Flex应用程序和IE之间内存消耗的不同
  • 不知何故,AMFChannel没有关闭,也没有垃圾收集
我的请求:

  • 我的结论正确吗
  • 如何确保AMFChannel已关闭并清理
  • 客户端上的连接实例是否由BlazeDS控制(在服务器端)
  • 有没有其他线索可以帮助我继续调查这个问题

谢谢

像所有对象一样,在某些情况下,指针需要声明为null以使其符合GC的条件。使用AMFChannel对象,最好的方法是为
channelDisconnect
channelFault
事件设置侦听器。如果您有对实例的类成员引用,则可以从这些事件处理程序中的任何一个将其声明为null


要确定是否应该从客户端调用disconnect,可以查看:shouldBeConnected和connected的属性。

我们也有同样的问题。JVM每24-50小时就会耗尽一次内存。我已经为JVM端的问题记录了一个有效的修复方法


感谢您的回复。如果AMFChannel在Flex中不可用,是否会导致IE上的connection对象无法正常工作?我添加了手动断开对每个活动时间超过1分钟的RemoteObject的调用。看起来Flex内存是稳定的,但IE内存继续增长。