【发布时间】:2017-04-26 19:54:13
【问题描述】:
我有一个使用太多内存的 JavaScript 应用程序。它不会使选项卡崩溃,但加载可能需要几分钟,其中大部分时间都花在了 GC 中。我正在使用堆分析器来查看哪些函数分配的内存最多,效果很好。
是否有某种方法可以让 Chrome 允许每个进程使用更大的 JS 堆,这样我就可以在减少内存压力的情况下进行测试运行,而无需等待几分钟的 GC?也许是我找不到的命令行参数?
【问题讨论】:
我有一个使用太多内存的 JavaScript 应用程序。它不会使选项卡崩溃,但加载可能需要几分钟,其中大部分时间都花在了 GC 中。我正在使用堆分析器来查看哪些函数分配的内存最多,效果很好。
是否有某种方法可以让 Chrome 允许每个进程使用更大的 JS 堆,这样我就可以在减少内存压力的情况下进行测试运行,而无需等待几分钟的 GC?也许是我找不到的命令行参数?
【问题讨论】:
是的 jsHeapSizeLimit 在控制台中报告:
> console.memory
MemoryInfo {totalJSHeapSize: 42100000, usedJSHeapSize: 29400000, jsHeapSizeLimit: 1620000000}
由两个限制计算得出:
size_t MaxReserved() {
return 2 * max_semi_space_size_ + max_old_generation_size_;
}
您可以使用 v8 标志设置这些最大值(以 MB 为单位):
chromium --js-flags="--max_old_space_size=512 --max_semi_space_size=512"
(如果您愿意,也可以使用--js-flags=--help 找到名称相似的初始分配标志。)
关于 gc 如何管理堆空间的简短描述是here。
【讨论】: