V8/Node.js 增加最大允许字符串长度

Nik*_*des 4 v8 node.js

AFAIK V8对允许的Strings的长度有一个已知的硬限制。尝试解析 >500MB 的字符串会弹出错误:

Invalid String Length
Run Code Online (Sandbox Code Playgroud)

使用 V8 标志来增加堆大小没有任何区别

$ node --max_old_space_size=5000 process-large-string.js
Run Code Online (Sandbox Code Playgroud)

我知道我应该改用 Streams。但是有什么办法可以增加最大允许String长度吗?


更新:下面来自@PaulIrish 的回答表明他们将其提高到 1GB - 但它仍然不是用户可配置的

jmr*_*mrk 10

抱歉,不,无法增加允许的最大String长度。

它在源代码中是硬编码的,并且许多代码隐式依赖于它,因此,虽然已知允许更大的字符串出现在人们的愿望清单上,但这将是大量工作,并且在不久的将来不会发生。

  • 可以放心地假设您是 V8 团队的成员。谢谢你所做的一切:) (2认同)
  • 这已不再是这种情况。看我的回答。 (2认同)

Pau*_*ish 8

2017 年夏天,V8 将字符串的最大大小从 ~256MB 增加到 ~1GB。具体来说,在 64 位平台上从2^28 - 162^30 - 25V8门票。

这一变化发生在:

  • V8:6.2.100
  • 铬:62.0.3167.0
  • Node.js:9.0.0

  • 由于指针压缩,这似乎已经回归 tp 2^28,并且最近根据 https://github.com/v8/v8/commit/ea56bf5513d0cbd2a35a9035c5c2996272b8b728 回升至 2^29 (0.5GB) :( (4认同)