我们正在使用ZK开发单页Web应用程序,该应用程序与服务器不断通信并更新其屏幕的部分内容。更新频率可以高达1秒。在这些更新过程中,对大量JS对象的引用会丢失,这些对象最终必须通过垃圾收集器进行清理。
据我们所知,Chrome仅在非活动标签上运行其垃圾回收器。这对我们来说是个问题,因为应用程序的标签通常是活动状态并且几乎从不刷新,因此JS对象永远不会被收集。如果保持足够长的时间处于活动状态,标签最终会崩溃(显示Aww Snap信息)。
我们需要手动启动垃圾收集。到目前为止,我们已经尝试使用--js-flags="--expose-gc"
运行Chrome并运行gc()
,但它会抛出异常:
ReferenceError: gc is not defined
在 Firefox 上不会发生这种情况 - 内存使用量多少是恒定的。
强制刷新页面不是一个选项。
我们将非常感激任何建议。
编辑:我们已经尝试在 Chrome 版本 23.0.1271.97 m
和 25.0.1364.2 dev-m
上运行 window.gc()
和 gc()
。
delete
关键字与内存管理无关,除非你使用它来删除一个对象的唯一引用属性,那么它只会作为一个副作用而触发内存管理。 - T.J. Crowderremove
或其他什么,但嘿,他当时承受了巨大的时间压力...)。 - T.J. Crowder