1

这是在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 内存。我徘徊为什么或如何以其他方式释放内存。

感谢您的帮助。

4

1 回答 1

0

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

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

于 2012-06-23T03:23:28.200 回答