我注意到在Win7的IE进程中,每次页面刷新时与之相关的内存会增加20-30兆。一旦达到1.5GB,浏览器就会失去响应。我正在使用IE9,并且只能在IE9中重现此问题。Chrome、Firefox、IE7或IE8都没有这样的问题。事实上,在兼容模式下运行IE9也不会出现此问题。
特别是,我想知道即使在页面刷新后内存怎么可能泄漏。有人还见过这种情况吗?
特别是,我想知道即使在页面刷新后内存怎么可能泄漏。有人还见过这种情况吗?
我不确定这是否是您的问题,但我也遇到了这个IE9内存泄漏问题,其中内存不断增长(每次刷新/页面更改约增长20mgs)。
如果您正在使用Modernizr(在最近的版本2.5+中应该已经修复了这个问题),但如果您使用的是旧版本(由于某些原因无法更新),那么您只需要替换一个return
语句即可。
问题出现在Modernizr / Geolocation & IE9中,实际上这是IE9的一个继承问题,而不是Modernizr的问题。
return 'geolocation' in navigator
改为:
return !!navigator.geolocation // this causes the memory leak (silly IE9)
var e = document.createElement('div');
var x = { elementReference: e };
e.jsReference = x;
< p>即使没有其他对e
和x
的引用,IE也不会将其进行垃圾回收。这是因为IE在DOM元素和JavaScript垃圾回收方面使用了不同的方法。
现在,我认为这个问题已经在IE的高版本中得到解决,但可能并未如此。如果您不再需要这些有问题的引用,请尝试找到它们并手动删除。
e.jsReference = null;
x.elementReference = null;
编辑:在IE 8中测试
我编写了这个简单的测试网页。
<html>
<head>
<title>Leak test</title>
<script>
function leak() {
var e = document.createElement('div');
var x = { elementReference: e };
e.jsReference = x;
}
function test() {
for (var i = 0; i < 10000; i++)
leak();
alert('Done');
}
</script>
</head>
<body>
<input type="button" value="test" onclick="test();" />
</body>
</html>