Javascript和垃圾收集

Ed *_*eal 44 javascript garbage-collection

有没有办法控制Javascript何时执行垃圾收集?我想让它在某些时候执行垃圾收集,以确保我的网站顺利运行

Sha*_*dow 77

Javascript没有明确的内存管理,它是决定何时清理它的浏览器.有时,由于垃圾收集暂停,您可能会遇到JavaScript的不流畅呈现.

您可以应用许多技术来克服垃圾收集(GC)导致的故障.更多你应用更多的探索.假设您有一个用JavaScript编写的游戏,并且每一秒都在创建一个新对象,那么很明显,在经过一定时间后,GC将会为您的应用程序腾出更多空间.

对于像游戏这样需要大量空间的实时应用程序,您可以做的最简单的事情就是重用相同的内存.这取决于您如何构建代码.如果它产生大量垃圾,那么它可能会带来不稳定的体验.

通过使用简单的过程:众所周知,新关键字表示分配.只要有可能,您可以尝试通过添加或修改属性来重复使用相同的对象.这也称为对象的回收

在Arrays的情况下,赋值[]通常用于清除数组,但是你应该记住,它还会创建一个新的数组并使旧的数组变得容易.要重用相同的块,您应该使用arr.length = 0它具有相同的效果,但它重用相同的数组对象而不是创建新的数组对象.

在函数的情况下:有时我们的程序需要通过使用setInterval或setTimeout更多时间或特定间隔调用特定函数.

ex: setTimeout(function() { doSomething() }, 10);
Run Code Online (Sandbox Code Playgroud)

您可以通过将函数分配给永久变量来优化上述代码,而不是每次定期生成.

    ex : var myfunc = function() { doSomething() }
    setTimeout(myfunc, 10);
Run Code Online (Sandbox Code Playgroud)

其他可能的事情是,数组slice()方法返回一个新数组(基于原始数组中的范围,可以保持不变),字符串的substr也返回一个新字符串(基于原始字符串中的一系列字符) ,这可以保持不变),等等.如果没有正确地重新使用,调用这些函数会产生垃圾.

在JavaScript中完全避免垃圾是非常困难的,你可以说不可能.它取决于您如何重用对象和变量以避免垃圾.如果您的代码结构良好且经过优化,则可以将开销降至最低.


Dev*_*One 5

不幸的是,没有办法控制垃圾收集发生的时间,但是通过正确形成物体,您可以控制它发生的速度和干净程度.在Mozilla Dev Net上查看这些文档.

该算法假定知道一组称为根的对象(在JavaScript中,根是全局对象).垃圾收集器会定期从这些根开始,找到从这些根引用的所有对象,然后从这些根引用所有对象,等等.从根开始,垃圾收集器将找到所有可到达的对象并收集所有非对象可达物体.

该算法优于前一个算法,因为"一个对象具有零引用"导致该对象无法访问.正如我们在周期中看到的那样,情况正好相反.