Apache flex Flex应用中的内存泄漏
我的Flex应用程序面临内存泄漏。 Flex应用程序是大型web应用程序的一部分(其中包含各种技术) 当Flex应用程序每5秒从服务器调用一次刷新轮询时,就会发生内存泄漏 事实是: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中,内存确实会增加,
- 我正在使用AMFChannel建立连接。投票是错误的。每次刷新都会创建新的AMFChannel实例李>
- 服务器端是BlazeDS,在我的web应用程序中作为servlet运行
- 内存泄漏发生在IE和FireFox上。它在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内存继续增长。