2017-06-14 57 views
0

AFAIK V8有一个已知的hard limit on the length of allowed Strings。试图解析> 500MB字符串会弹出错误:V8/Node.js增加允许的最大字符串长度

Invalid String Length 

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

$ node --max_old_space_size=5000 process-large-string.js 

我知道,我应该使用流来代替。但是,有什么方法可以增加最大允许长度String


更新:下面从@PaulIrish回答表明,他们就调升到1GB - 但它仍然不是用户可配置的

回答

1

对不起,没有,没有办法来增加最大允许String长度。

它在源代码中是硬编码的,很多代码隐含地依赖于它,所以虽然允许更大的字符串被认为是在人们的愿望清单上,但它将是很多工作并且不会发生在不远的将来。

+0

你碰巧知道这种限制的原因?为什么'String'在V8中具有特定的最大长度? –

+0

它的历史可以追溯到2010年。那时候,512MB是整个堆的限制,我认为决定没有一个字符串可以/应该比堆大;-)(512 MB =一个长度为2^28的UTF-16字符串的内存消耗。) – jmrk

+1

假设你在V8团队中是安全的。谢谢你的一切:) –

2

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

  • V8:V8 ticket.

    这种变化落在6.2.100

  • 铬:62.0.3167.0
  • 的Node.js:9.0.0
相关问题