当前位置:首页 > 开发 > Web前端 > 前端 > 正文

关于DWR内存泄漏的问题

发表于: 2012-04-25   作者:cuisuqiang   来源:转载   浏览次数:
摘要: 机器跑了一晚上,发现有崩溃现象,由于页面内有动态绘图功能,我怀疑是绘图原因,但是今天上午有人提醒我才想到,是不是间隔调用时DWR产生了内存泄漏问题?   网上查了一下貌似大家都在讨论这个问题,之前我也挺老手说过DWR有内存问题,可是没有遇到过。原来DWR在间隔调用这种情况下会有问题!   按照大家的说法,修改engine.js配置文件来解决问题,目前我也修改了一下,修改

机器跑了一晚上,发现有崩溃现象,由于页面内有动态绘图功能,我怀疑是绘图原因,但是今天上午有人提醒我才想到,是不是间隔调用时DWR产生了内存泄漏问题?

 

网上查了一下貌似大家都在讨论这个问题,之前我也挺老手说过DWR有内存问题,可是没有遇到过。原来DWR在间隔调用这种情况下会有问题!

 

按照大家的说法,修改engine.js配置文件来解决问题,目前我也修改了一下,修改方法如下:

dwr.engine._sendData = function(batch) {}

 

内有,这样几行代码:

// Get setup for XMLHttpRequest if possible
if (batch.rpcType == dwr.engine.XMLHttpRequest) {
if (window.XMLHttpRequest) {
  batch.req = new XMLHttpRequest();
}
// IE5 for the mac claims to support window.ActiveXObject, but throws an error when it's used
else if (window.ActiveXObject && !(navigator.userAgent.indexOf("Mac") >= 0 && navigator.userAgent.indexOf("MSIE") >= 0)) {
  batch.req = dwr.engine._newActiveXObject(dwr.engine._XMLHTTP);
}
}

 

看起来IE请求Ajax的对象每次都在创建

而根据网上的说法,IE在创建对象后,如果这个页面不关闭(包括不能最小化)时,其创建的对象是一直不销毁的。那么无限制的创建对象且不销毁,当然会内存泄漏

 

目前我改了一下,如下面代码:

var httprequest = null;
// Get setup for XMLHttpRequest if possible
if(null==httprequest){
	// Get setup for XMLHttpRequest if possible
	if (batch.rpcType == dwr.engine.XMLHttpRequest) {
		if (window.XMLHttpRequest) {
			httprequest = new XMLHttpRequest();
		}
		// IE5 for the mac claims to support window.ActiveXObject, but throws an error when it's used
		else if (window.ActiveXObject && !(navigator.userAgent.indexOf("Mac") >= 0 && navigator.userAgent.indexOf("MSIE") >= 0)) {
			httprequest = dwr.engine._newActiveXObject(dwr.engine._XMLHTTP);
		}
	}
}

 

就是说第一次创建,之后不再创建,相当于单例模式。

由于内存泄漏时长时间运行引起的,目前尚不知该方法是否能解决问题。但是从任务管理器上看,好像有所改善,我们还需要进一步测试。

后面我会告诉大家测试结果,如果大家有其他说法和解决方案,请及时留言,不胜感激!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

关于DWR内存泄漏的问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
背景 浪潮烟草技术人员针对广东烟草12月10日内存溢出事件进行了广泛的技术探讨,并得到了一些建设性
原文:http://www.godiscoder.com/?p=479 在最近一个项目中,在项目发布之后,发现系统中有内存泄漏
1:java中垃圾回收机制主要完成下面两件事情: 跟踪并监控每个java对象,当某个对象处于不可达状态
前段时间,测试的同事跟我说,前端有非常严重的内存泄漏问题。使用不到一天的时间,浏览器的内存占
内存泄漏是比较常见的问题,而且解决方法也比较通用,这里可以重点说一下,而线程、热点方面的问题
近几天看了些关于JavaScript内存管理的文章,相对于Java JVM的内存管理,显得简单些。 在学习的过程
原文:http://www.godiscoder.com/?p=479 在最近一个项目中,在项目发布之后,发现系统中有内存泄漏
目前,mes项目存在内存泄漏问题.主要表现如下, 系统运行一段时间后,会越来越慢,严重的会导致ie崩溃.
最近在测一个接口时,发现在并发压力的情况下,用jconsole监控JVM后,发现服务器灰常耗费内存导致GC
内存泄漏: 程序申请了堆空间,但是“忘记”释放,导致该块区域在程序结束前无法被再次使用导致的。
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号