V8 构造函数(组)条目,如(数组)、(字符串)在内存中随时间增长。如何阻止这些条目的内存增长?可能吗?

V8 constructor (group) entries such as (array), (string) grows in memory with time. How to arrest the memory growth of these entries? Is it possible?

我 运行 我的网站使用 puppeteer 的简单 CRUD 过程。我可以看到堆内存随着时间逐渐增长,chrome 的内部对象,如(系统)、(数组)、(字符串)、(编译代码)等也在内存中随着时间增长。对于 301 MB 的堆快照,大约。为(阵列)分配了 148 MB,为(系统)分配了 59 MB。有什么可能的方法,我可以阻止它的增长,或者这是 chrome 默认行为?

如果您发现内存无限增长(即使用越来越多,直到选项卡最终因 out-of-memory 而崩溃),那么您的代码中很可能存在内存泄漏。你可以使用 DevTools 来调查它;如果您需要帮助,例如https://developers.google.com/web/tools/chrome-devtools/memory-problems/.

上的详细文章

如果您看到 "sawtooth" 模式(即内存使用量缓慢增长一段时间(通常是几秒或几分钟),然后突然下降,然后又缓慢增长,等等),那么您可能只是看到正在运行的垃圾收集器。查找和释放未使用的内存需要时间,因此 V8 试图巧妙地平衡它所做的事情。当有大量空闲内存可用时,V8(在一定范围内)优先执行代码而不是收集垃圾。当内存不足或有空闲时间时,它会花费更多时间进行清理。