Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:循环内存泄漏?_Javascript_Memory_Loops_Memory Leaks - Fatal编程技术网

Javascript:循环内存泄漏?

Javascript:循环内存泄漏?,javascript,memory,loops,memory-leaks,Javascript,Memory,Loops,Memory Leaks,我有一个简单的循环,可以创建和销毁(希望如此)空对象: 如果我一直单击链接,Chrome/Safari中的内存配置文件将显示类似内存泄漏的行为: 我遗漏了什么吗?是托管内存。因此,当垃圾收集器运行时,它将在某个点收集已删除的对象。删除对象实际上没有任何作用。然而,由于视图从来都不是引用,所以应该很容易收集它。它是托管内存。因此,当垃圾收集器运行时,它将在某个点收集已删除的对象。删除对象实际上没有任何作用。然而,由于视图从来都不是引用,所以应该很容易收集它。这看起来像是正常的GC行为。一旦对象

我有一个简单的循环,可以创建和销毁(希望如此)空对象:

如果我一直单击链接,Chrome/Safari中的内存配置文件将显示类似内存泄漏的行为:


我遗漏了什么吗?

是托管内存。因此,当垃圾收集器运行时,它将在某个点收集已删除的对象。删除对象实际上没有任何作用。然而,由于视图从来都不是引用,所以应该很容易收集它。

它是托管内存。因此,当垃圾收集器运行时,它将在某个点收集已删除的对象。删除对象实际上没有任何作用。然而,由于视图从来都不是引用,所以应该很容易收集它。

这看起来像是正常的GC行为。一旦对象太多,GC就会清理它们


只有当每个峰值后的波谷(就在GC运行之后)连续升高,表明GC没有捕获所有内容时,才会出现内存泄漏。

这看起来像是正常的GC行为。一旦对象太多,GC就会清理它们


只有当每个峰值后的波谷(就在GC运行之后)连续升高,表明GC没有捕获所有内容时,才会发生内存泄漏。

该代码不会泄漏


为了说服自己,你可以拍下记忆的快照,并比较前后。看看我写的这本指南,了解更多细节:。

代码不会泄漏


为了说服自己,你可以拍下记忆的快照,并比较前后。看看我写的这本指南,了解更多细节:。

除了可能的内存泄漏之外,“delete”是多余的,因为引用无论如何在一个循环后都会超出范围。你不能像那样实际使用
delete
;它只用于删除对象中的属性。@Dykam:错误。Javascript没有块作用域。我得到了纠正(最近perl太多了),我的意思是旧的视图变量将在下一个循环中通过重新定义而超出作用域。是谁一直让陷于手动内存管理思维的开发人员使用GC语言编程?除了可能的内存泄漏,“delete”是多余的,因为无论如何循环一次后引用将超出范围。您不能像那样实际使用
delete
;它只用于删除对象中的属性。@Dykam:错误。Javascript没有块作用域。我得到了纠正(最近perl太多了),我的意思是,通过重新定义,旧的视图变量将在下一个循环中超出作用域。谁一直让陷于手动内存管理思维的开发人员使用GC语言编程?那么,这里的关键点是,下次运行垃圾收集器时将删除该对象。这在概念上与C++新的/删除不同,这就是为什么我在Prror中看到内存的增加,B/C链接被频繁点击,然后内存下降,这是因为垃圾回收器运行。谢谢。没错,虽然
new
确实分配了一些内存;delete不会取消分配itso,这里的关键点是下次运行垃圾回收器时将删除该对象。这在概念上与C++新的/删除不同,这就是为什么我在Prror中看到内存的增加,B/C链接被频繁点击,然后内存下降,这是因为垃圾回收器运行。谢谢。没错,虽然
new
确实分配了一些内存;删除不会取消分配它
function Test()
{
}

function generate()
{
    for(var i = 0; 1000 > i; ++i)
    {
        var view = new Test();

        delete view;
    }
}