2017-06-14 92 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
相關問題