尝试帮助JavaScript垃圾收集器有意义吗?
当我像高级面向对象语言一样大量使用JavaScript时,我发现自己像C/C++程序员一样思考,当我完成对象时,我就是这样想的。我知道GC最终会运行并清理我的烂摊子,但我能做些什么来帮助它呢 例如,我有一个大型/复杂的主对象数组。。。每个主对象内部可能都有数组和其他辅助对象引用。如果我处理完一个主要对象并将其从数组中移除,GC可能最终会找出该对象自身指向的所有其他对象,循环内部引用和所有。但是,当从存储阵列中删除主对象以遍历它和阵列时,它是否有意义。length=0 any array和reference=null any objects基本上使GC作业更容易(例如,显式删除引用意味着GC跟踪的对象更少)?如果你愿意的话,这是一种手动析构函数。这样做值得吗?或者我是在浪费时间/精力而得不到什么好处 我想这更像是GC问题的一般理论(Java等),但出于这个问题的目的,我主要对JavaScript感兴趣尝试帮助JavaScript垃圾收集器有意义吗?,javascript,garbage-collection,Javascript,Garbage Collection,当我像高级面向对象语言一样大量使用JavaScript时,我发现自己像C/C++程序员一样思考,当我完成对象时,我就是这样想的。我知道GC最终会运行并清理我的烂摊子,但我能做些什么来帮助它呢 例如,我有一个大型/复杂的主对象数组。。。每个主对象内部可能都有数组和其他辅助对象引用。如果我处理完一个主要对象并将其从数组中移除,GC可能最终会找出该对象自身指向的所有其他对象,循环内部引用和所有。但是,当从存储阵列中删除主对象以遍历它和阵列时,它是否有意义。length=0 any array和refe
谢谢 非常聪明的人在这些垃圾收集模型上付出了很大的努力。您所做的任何事情都比他们所实现的要大幅度提高性能的几率相对较低 如果垃圾收集正在成为您的主要成本,那么您可能最好集中精力减少必须进行垃圾收集的对象的数量(请考虑) 这与从不不同 通常,如果您以合理的方式开发,未使用的对象将适当地超出范围,垃圾收集器将按预期工作。除非您真正了解自己在做什么,否则帮助垃圾收集器完成其工作的努力通常不会如愿。垃圾收集是各种Javascript引擎的创建者进行了重大优化的一个领域。一般来说,除非:
- 您已经通过分析工具中的硬数字证明了存在 真正的需要,以及
- 您可以展示对实际需要更改的内容的真正理解 帮助垃圾收集器
因此,最好的答案可能是,除非您已经足够了解异常,否则您可能不应该担心这一点。这可能取决于特定的垃圾收集器,因此答案将取决于您使用的JavaScript引擎 首先,我要指出,最好的应用程序代码有两个功能。它实现了功能和性能方面的技术目标,并且能够适应变化。额外的代码应该足以证明增加的复杂性 根据Chrome使用的JavaScript引擎 V8可回收存储库中不再需要的对象所使用的内存 这个过程称为垃圾收集。为确保快速分配对象, 垃圾收集暂停时间短,没有内存碎片 雇佣了一个世世代代、精确的垃圾收集器。 这意味着V8:
- 执行垃圾回收循环时停止程序执行
- 在大多数垃圾收集周期中,仅处理对象堆的一部分。这将使停止应用程序的影响降至最低
- 始终准确地知道所有对象和指针在内存中的位置。这样可以避免错误地将对象标识为指针,从而导致 内存泄漏