【问题标题】:V8/Node.js increase max allowed String lengthV8/Node.js 增加最大允许字符串长度
【发布时间】:2017-11-15 23:13:54
【问题描述】:

AFAIK V8 有一个已知的hard limit on the length of allowed Strings。尝试解析 >500MB 的字符串会弹出错误:

Invalid String Length

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

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

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


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

【问题讨论】:

    标签: node.js v8


    【解决方案1】:

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

    此更改发生在:

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 你知道这个限制的原因吗?为什么String 在 V8 中有特定的最大长度?
    • 它可以追溯到 2010 年。当时,512MB 是整个堆限制,我想决定没有单个字符串可以/应该大于堆是不费吹灰之力的;-)(512 MB = 长度为 2^28 的 UTF-16 字符串的内存消耗。)
    • 可以肯定地假设您是 V8 团队的一员。谢谢你的一切:)
    • 现在已经不是这样了。看我的回答。
    • @PaulIrish 好吧,实际上仍然是有最大限制的情况;限制增加到大约 1gig
    猜你喜欢
    • 2012-07-09
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多