即记忆释放

时间:2012-06-23 03:18:31

标签: javascript internet-explorer memory

这是在IE8中测试的代码:

var stack = [];
function test() {
    var i = 0;
    while(i++ < 100000) {
        stack[i] = {a: "some string"};
        delete stack[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();

它使用54860K内存。我徘徊为什么或如何以其他方式释放记忆。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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