有没有办法控制Chrome GC?

Mat*_*ius 5 javascript garbage-collection google-chrome v8 knockout.js

我正在处理大量数据.
机制:
JavaScript正在读取WebSQL数据库,然后将数据组装成具有树结构的Object.
然后应用于树对象knockout.js(使元素可观察)然后数据绑定,然后在最后应用Jquery Mobile UI.

整个过程需要不可接受的时间.
我已经优化了使树对象脱离数据的算法,还通过将项直接推送到ko.observable数组并仅调用hasMutated一次来优化转换为observables机制.我正在应用knockout.js IF绑定来处理UI中不可见的树节点,直到打开父节点.

这里的表现很关键.
在Chrome开发人员工具中检查时间轴中的页面加载后,我注意到垃圾收集器在构建树对象时正在清理每个并发调用.

Chrome时间轴 - 我们可以多次看到GC收集项目

问题:有没有办法临时禁用Chrome GC,然后在完成页面处理后再次启用它?

PS我知道我可以添加对收集的部分的引用,基本上引入主导并防止GC收集的对象,但这需要通过代码进行大量更改,而且我不确定我能保持足够长的时间,并且很可能引入内存泄漏.当然必须有更好的方法

jmr*_*mrk 1

不,没有办法禁用垃圾收集器。不可能,因为当请求更多内存但没有可用内存时,Chrome 应该做什么?

(此外,垃圾收集器非常细粒度和复杂;您的屏幕截图有点太小而无法阅读,但您看到的很可能是跟上分配的增量工作的小步骤,和/或“次要 GC”周期仅在发生新分配的堆中相对较小的区域上运行。)

如果您想减少 GC 所花费的时间,那么实现这一目标的主要方法是分配更少和/或更小的对象。是的,这可能意味着更改应用程序的设计,以便重用对象而不是短暂的对象,或者策略上的类似更改。

如果你分配了很多,你会看到很多 GC 活动,这是没有办法解决的。即使在不被视为“垃圾收集”的语言/运行时也是如此,例如在 C/C++ 中使用new/ deletea lot 也会产生性能成本。