我有一个相当复杂的Javascript应用程序,其主循环每秒调用60次。根据Chrome开发工具中的内存时间轴输出显示,似乎有很多垃圾回收正在进行,这经常影响应用程序的性能。
因此,我正在尝试研究减少垃圾收集器所需工作量的最佳实践。(我在网上找到的大多数信息涉及避免内存泄漏,这是一个略微不同的问题——我的内存被释放了,只是垃圾收集太多了。) 我假设这主要归结于尽可能多地重用对象,但是细节决定成败。
该应用程序以“类”为结构,类似于John Resig的Simple JavaScript Inheritance。
我认为其中一个问题是一些函数可以每秒调用数千次(因为它们在主循环的每个迭代中使用数百次),也许这些函数中的本地工作变量(字符串、数组等)可能是问题所在。
我知道针对较大或较重对象的对象池技术(我们在一定程度上使用了这种技术),但我正在寻找可以应用于所有情况的技术,特别是与在紧密循环中被频繁调用的函数有关的技术。
有哪些技术可以减少垃圾回收器的工作量?
或许还有一些方法可以用来识别哪些对象被垃圾回收最多?(代码库相当大,因此比较堆快照并没有太大帮助)