`await Promise.all` 和 `X = await Promise.all` 之间的内存使用会发生变化吗?
Will memory usage change between `await Promise.all` and `X = await Promise.all`?
例如,如果每个 promises
解析为一个具有 1 个字节的值,并且承诺的数量为 100,000
await Promise.all(promises) // not capture the return value
X = await Promise.all(promises) // capture the return value
显然,后一个至少要花费 100,00 字节,但是第一个呢?
V8 会做一些优化来减少第一个的内存使用吗?
不分配 await Promise.all()
的结果仅意味着该结果将立即符合垃圾回收条件。结果仍然由 Promise.all()
创建,因为它不知道您是否要使用它。
因此,这是否会与您的 X = await Promise.all(...)
产生任何差异完全取决于 X 可用于垃圾回收的时间。如果您立即使用结果,然后 X 超出范围并很快符合垃圾回收条件,那么内存使用情况可能没有差异,因为该值将被创建,然后以两种方式在相似的时间进行垃圾回收。
另一方面,如果 X
保留很长时间(比如存储在一些持久的数据结构中),那么它的内存使用当然会持续一段时间。
Will V8 does some optimizations to reduce memory usage for the first one?
没有
例如,如果每个 promises
解析为一个具有 1 个字节的值,并且承诺的数量为 100,000
await Promise.all(promises) // not capture the return value
X = await Promise.all(promises) // capture the return value
显然,后一个至少要花费 100,00 字节,但是第一个呢?
V8 会做一些优化来减少第一个的内存使用吗?
不分配 await Promise.all()
的结果仅意味着该结果将立即符合垃圾回收条件。结果仍然由 Promise.all()
创建,因为它不知道您是否要使用它。
因此,这是否会与您的 X = await Promise.all(...)
产生任何差异完全取决于 X 可用于垃圾回收的时间。如果您立即使用结果,然后 X 超出范围并很快符合垃圾回收条件,那么内存使用情况可能没有差异,因为该值将被创建,然后以两种方式在相似的时间进行垃圾回收。
另一方面,如果 X
保留很长时间(比如存储在一些持久的数据结构中),那么它的内存使用当然会持续一段时间。
Will V8 does some optimizations to reduce memory usage for the first one?
没有