Javascript ie内存释放

Javascript ie内存释放,javascript,internet-explorer,memory,Javascript,Internet Explorer,Memory,以下是在IE8中测试的代码: var stack = []; function test() { var i = 0; while(i++ < 100000) { stack[i] = {a: "some string"}; delete stack[i]; }; } test(); var堆栈=[]; 功能测试(){ var i=0; 而(i++

以下是在IE8中测试的代码:

var stack = [];
function test() {
    var i = 0;
    while(i++ < 100000) {
        stack[i] = {a: "some string"};
        delete stack[i];
    };
}
test();
var堆栈=[];
功能测试(){
var i=0;
而(i++<100000){
堆栈[i]={a:“某个字符串”};
删除堆栈[i];
};
}
test();
此脚本仅在IE中使用少量内存。Windows任务管理器显示29704K,但下一个:

var stack = [];
function test() {
    var i = 0;
    while(i++ < 100000) {
        stack[i] = {a: "some string"};
    };
    i = 0;
    while(i++ < 100000) {
        delete stack[i];
    }
}
test();
var堆栈=[];
功能测试(){
var i=0;
而(i++<100000){
堆栈[i]={a:“某个字符串”};
};
i=0;
而(i++<100000){
删除堆栈[i];
}
}
test();
它使用54860K内存。我想知道为什么或者如何以另一种方式释放记忆


感谢您的帮助。

如果您只是查看系统级的浏览器内存使用总量,那么您可能是查看最大浏览器内存使用量,而不是实际使用的内存量。仅仅因为您在浏览器中释放了某些内容,并不意味着浏览器会将该内存返回给操作系统。该内存可能在浏览器中可供将来重用,但尚未返回到操作系统


第二个示例将比第一个示例具有更高的峰值内存使用率,因为在删除元素之前完全填充数组。因此,如果由于峰值使用率较高而在系统级别显示了更大的内存使用率,这也就不足为奇了。这并不意味着更多的内存仍在使用,只是浏览器必须从系统请求更多内存以应对更高的峰值使用率,并且浏览器不一定会将现在未使用的内存返回操作系统。该内存将位于浏览器的可用内存池中,可用于将来的内存请求,因此不会出现内存泄漏。

如何衡量内存使用情况?您的意思是,在调用
test()
之后,可用的可用内存已经减少了您所显示的数字—内存泄漏?或者在函数运行时使用内存,但之后又变为可用?请注意,
delete
将删除该属性,但这并不意味着该属性所引用的对象将立即被垃圾收集。这两个示例在两个页面中运行,在该页面中没有其他内容。他们跑了几分钟后我就恢复了记忆。谢谢你的帮助。我等待了很长一段时间,但是浏览器在处理完完整的数组后没有向操作系统释放内存。@user1476272-这并不奇怪。浏览器可能会保留内存以备将来使用。再次运行同一个函数,内存应该不会增加,或者不会增加太多,因为部分内存正在被重用。是的,我调用test()太多次,最大内存为89M。你是对的。但它不会释放操作系统的内存,这是一个问题。再次感谢。@user1476272-如果IE没有归还内存,那么这就是它的设计方式-我们对此无能为力。为什么你认为这是一个严重的问题?Windows有虚拟内存,因此即使它不再被使用,并且您的其他应用程序也会耗尽其余的物理内存,那么这些未使用的内存将从物理内存交换到磁盘,并且不会再次产生影响。此外,在2-3GB的系统内存环境下,89M也不是什么大问题(3-4%)。