Java DWR内存泄漏问题解决方案
作者:cuisuqiang 发布时间:2022-02-28 02:35:07
标签:Java,DWR,内存,泄漏
机器跑了一晚上,发现有崩溃现象,由于页面内有动态绘图功能,我怀疑是绘图原因,但是今天上午有人提醒我才想到,是不是间隔调用时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);
}
}
}
就是说第一次创建,之后不再创建,相当于单例模式。
由于内存泄漏时长时间运行引起的,目前尚不知该方法是否能解决问题。但是从任务管理器上看,好像有所改善,我们还需要进一步测试。
来源:https://www.iteye.com/blog/cuisuqiang-1498037


猜你喜欢
- 最近项目中用到了文字图标的按钮,需要居中显示,如果用TextView实现的方式,必须同时设置padding和drawablePadding。
- 引言:上一专题介绍了下编译器是如何来翻译委托的,从中间语言的角度去看委托,希望可以帮助大家进一步的理解委托,然而之前的介绍都是委托只是封装一
- 在游戏项目中我们常常看到商城的广告牌,几张广告图片循环滚动,类似跑马灯,现在我将讨论一种实现方法,并提供一个管理类,大家可以直接使用。实现原
- java简易小游戏制作游戏思路:设置人物移动,游戏规则,积分系统,随机移动的怪物,游戏胜负判定,定时器。游戏内容部分package 代码部分
- JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在
- Javaweb开发环境的配置也是比较繁琐的一件事情,虽然理论上使用记事本,完全可以写出一个Javaweb工程,但是在团队大型开发的Javaw
- 前言本文主要介绍的是短信验证码功能,这里总结了两种常用的方式,可以直接拿来使用。看图计时器说明:这里的及时从10开始,是为了演示的时间不要等
- 本文实例为大家分享了Android使用AIDL方式实现播放音乐的具体代码,供大家参考,具体内容如下思路:① 新建两个APP项目或者Modul
- 详解xamarin Android 实现ListView万能适配器早些时候接触xamarin Android 的列表,写了很多ListVie
- 一个是通过W、A、S、D来移动人物(示例一),另个是按屏幕上的按钮来移动人物(示例二)。很简单,只改了几行代码。下面是“Assets”文件夹
- 本文实例讲述了C#冒泡法排序算法。分享给大家供大家参考。具体实现方法如下:static void BubbleSort(IComparabl
- 性能优化的帮助工具:MAT,Memory Monitor(属于AndroidMonitor中一个模块),HeapTool(查看堆
- 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示U
- 如下所示:package test.com.gjob.services; import java.util.Properties
- 本文实例为大家分享了C#实现餐厅管理系统的具体代码,供大家参考,具体内容如下部分代码:fm_change_password.csusing
- 在Spring中进行事务管理非常简单,只需要在方法上加上注解@Transactional,Spring就可以自动帮我们进行事务的开启、提交、
- 问题背景昨晚同事找我帮他看一个问题,他使用mybatis-plus中提供的updateById方法,想将查询结果中某个字段原本不为null的
- 调试的时候,在循环里增加条件判断,可以极大的提高效率,心情也能愉悦。以下介绍下IDEA使用条件【Condition】断点的方法1、编写一段样
- 简介 相信很多人都接触spring框架很长时间了,每次搭建spring框架的时候都需要配置好多的jar、xml,做很多繁琐重复的配置,稍微不
- 0 写在前面相信用过相机的同学都知道虚化特效,这是一种使焦点聚集在拍摄主题上,让背景变得朦胧的效果,例如本文最后实现的背景虚化效果相机虚化特