3

我正在做一个游戏,我看到很多内存消耗,我使用 jquery animate,动画完成后,我 .remove() 元素,我的问题是,从 dom 树中删除一个元素后,对象还存在于记忆中?

4

2 回答 2

8

Javascript 是一种垃圾收集语言。这意味着当没有代码保存对它的任何引用并且(对于 DOM 对象)它不在 DOM 中时,内存中的对象将被释放。因此,当您从 DOM 中删除一个对象时,只要您的 javascript 的其他部分没有对该 DOM 对象的引用,该 DOM 对象就会被清理,并且当垃圾收集器获得一个跑的机会。

请记住,当垃圾收集器释放内存时,它可能不会立即或永远不会返回到系统。它可能保留为分配给浏览器的内存,但可供浏览器内的其他内存请求使用。因此,释放脚本中的内存并不一定会使浏览器使用的总内存减少。

如果一遍又一遍地重复执行相同的操作导致浏览器使用的总内存不断增加,这只是内存泄漏。只有这样,您才能确定某些内存正在被“泄漏”永久消耗。

关于垃圾收集有许多细微差别,特别是对于旧版本的 IE,但对于现代浏览器,您需要记住的主要是如果您在自己的 javascript 数据结构中持有对对象的引用,它不会被垃圾收集。如果你没有对它的引用并且它不在 DOM 中,它将被释放并回收它的内存。

于 2012-06-14T23:18:41.897 回答
4

如果没有对该元素的引用,垃圾收集将在下一次运行时将其清理干净。你很好用.remove,但不用担心垃圾收集。

于 2012-06-14T23:01:05.783 回答