我有一个相当复杂的 Javascript 应用程序,它有一个每秒调用 60 次的主循环。似乎有很多垃圾收集正在进行(基于 Chrome 开发工具中内存时间线的“锯齿”输出)——这通常会影响应用程序的性能。
因此,我正在尝试研究减少垃圾收集器必须做的工作量的最佳实践。(我在网上找到的大部分信息都是关于避免内存泄漏,这是一个稍微不同的问题——我的内存正在被释放,只是垃圾收集太多了。)我假设这主要归结为尽可能多地重用对象,但细节当然是魔鬼。
该应用程序按照John Resig 的 Simple JavaScript Inheritance 的“类”结构构建。
我认为一个问题是某些函数每秒可以调用数千次(因为它们在主循环的每次迭代中被使用了数百次),并且这些函数中的局部工作变量(字符串、数组等)可能会被调用。可能是问题所在。
我知道更大/更重对象的对象池(我们在一定程度上使用它),但我正在寻找可以全面应用的技术,特别是与在紧密循环中被多次调用的函数有关.
我可以使用哪些技术来减少垃圾收集器必须完成的工作量?
而且,也许还有 - 可以使用哪些技术来识别哪些对象被垃圾收集最多?(这是一个非常大的代码库,因此比较堆的快照并不是很有成效)