Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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_Null - Fatal编程技术网

如果在javascript中清空已用对象,是否会保存可能愚蠢的垃圾收集?

如果在javascript中清空已用对象,是否会保存可能愚蠢的垃圾收集?,javascript,null,Javascript,Null,如果在javascript中清空已用对象,是否会保存可能愚蠢的垃圾收集 比如说 如果您在javascript中迭代某些用户: var users = [ { FirstName: "Chris", LastName: "Pearson" }, { FirstName: "Kate", LastName: "Johnson" }, { FirstName: "Josh", LastName: "Sutherland" }, { FirstName: "John",

如果在javascript中清空已用对象,是否会保存可能愚蠢的垃圾收集

比如说

如果您在javascript中迭代某些用户:

var users = [
    { FirstName: "Chris", LastName: "Pearson" },
    { FirstName: "Kate", LastName: "Johnson" },
    { FirstName: "Josh", LastName: "Sutherland" },
    { FirstName: "John", LastName: "Ronald" },
    { FirstName: "Steve", LastName: "Pinkerton" }
];

// Do something with the data, perhaps put it in a table

users = null;
现在是否值得取消该列表?是否有人在性能提升背后有一些科学依据,或者这是浪费时间等


有时候,很难解释为什么你要以某种方式做事,我知道它在很多场合都是我的培根,当然,C++,但是在JavaScript中,有没有实验来证明它是否值得在JavaScript中使用?找到一个我可以信任的函数,让我哭泣。。。如果有人已经做过这样的实验,我将非常感激看到你的想法

这取决于具体情况。例如,在这里它是无用的:

function putUsersInTable(){
    var users = [
        { FirstName: "Chris", LastName: "Pearson" },
        { FirstName: "Kate", LastName: "Johnson" },
        { FirstName: "Josh", LastName: "Sutherland" },
        { FirstName: "John", LastName: "Ronald" },
        { FirstName: "Steve", LastName: "Pinkerton" }
    ];

    // Do something with the data

    users = null; // Useless, the data could be GC'd anyways
}
在这里,它将允许在无法进行其他操作时对数据进行GC:

function putUsersInTable(){
    var users = [
        { FirstName: "Chris", LastName: "Pearson" },
        { FirstName: "Kate", LastName: "Johnson" },
        { FirstName: "Josh", LastName: "Sutherland" },
        { FirstName: "John", LastName: "Ronald" },
        { FirstName: "Steve", LastName: "Pinkerton" }
    ];

    // Do something with the data

    // This could be an event hander in the DOM or any global variable
    outsidethisscope = function(){
        // This anonymous function has access to users,
        // But doesn't necessarily make use of it
        console.log('Hi');
    }

    users = null; // Removes the only reference to that array, 
                  // allowing it to be GC'd
}

你试过了吗?如果你的变量超出范围,没有人引用它,不管你是否取消它,它都会被GC吞噬。不幸的是,我的用户是全局的,我有一个“类”(出于所有目的和意图),我制作了很多版本,这些都是我的用户。它们是在一个全局类中创建的(以便我更容易调试名称空间),因此用户会持久化。。但不仅仅是用户,我在javascript对象中有大约50种不同类型的数据,我注意到,一段时间后,浏览器突然加速。我在想“这一定是垃圾收集”。。。现在,我可以在正确的时间跳入并取消所有内容,但我想在执行此操作之前了解更多。啊,我明白了,因为函数必须保持,才能继续使用此范围外的引用。这是否意味着用户实际上总是满的,或者在某个时候释放内存?它有那么聪明吗?V8中的闭包GC问题/内存泄漏要求
在此作用域之外
至少引用其外部作用域中的另一个变量,并且
用户
至少在某些其他内部函数中被引用。后者是为
用户
分配上下文所必需的,前者是为
在此范围之外
提供指向上下文的指针所必需的,因此即使在没有必要时也能保持上下文的活动状态。@Esailija我指的不是GC问题。只要有东西仍然引用匿名函数
users
,就不能被GC调用。那不是虫子。知道这一点太好了!我想知道在这样的情况下,我可以节省多少内存来确保清除这些变量!好的,如果你仍然不同意我的观点,请查看这些jsfiddles。(chrome中没有GC问题)(chrome中仍然没有GC问题)(有问题)。要查看它,请按developer tools中的collect garbage,并查看只有/4不会回收内存