NodeJs如何高效处理超长字符串导致的内存溢出问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1068个文字,预计阅读时间需要5分钟。
目录 + 问题背景 + 代码细节 + 进阶一步 + 总结 + 问题:对于巨大的 +string+ V8 不支持 + 问题背景:在 Nodejs 计算服务中,对端上报的内存信息二进制数据进行预处理 + 缓存时,遇到了一个奇特的报错 + 代码细节:暂无 + 进阶一步:考虑使用流处理或分块处理技术 + 总结:需要进一步研究和测试以找到解决方案
目录
- 问题背景
- 代码细节
- 更进一步
- 总结
问题:对于超大的 string V8不能支持
问题背景
在 Nodejs 计算服务中,对端上上报的内存信息二进制数据进行预处理+缓存时,遇到了一个奇怪的报错:RangeError: Invalid string length 。根据该报错信息,查找得知是字符串长度超过了 node.js 的限制,即 2^29-1 (约 5 亿+)个字符。整体流程如图所示。
关于 node.js string 的长度上限,主要和 V8 引擎「压缩指针」技术有关。按个人理解,其通过压缩指向变量的地址(64 位)中固定的 32 位的方式,从而减少引擎的内存占用。
代码细节
由于需要快速访问某地址,因此缓存的数据结构必须是个对象,即 INodeGraph。
本文共计1068个文字,预计阅读时间需要5分钟。
目录 + 问题背景 + 代码细节 + 进阶一步 + 总结 + 问题:对于巨大的 +string+ V8 不支持 + 问题背景:在 Nodejs 计算服务中,对端上报的内存信息二进制数据进行预处理 + 缓存时,遇到了一个奇特的报错 + 代码细节:暂无 + 进阶一步:考虑使用流处理或分块处理技术 + 总结:需要进一步研究和测试以找到解决方案
目录
- 问题背景
- 代码细节
- 更进一步
- 总结
问题:对于超大的 string V8不能支持
问题背景
在 Nodejs 计算服务中,对端上上报的内存信息二进制数据进行预处理+缓存时,遇到了一个奇怪的报错:RangeError: Invalid string length 。根据该报错信息,查找得知是字符串长度超过了 node.js 的限制,即 2^29-1 (约 5 亿+)个字符。整体流程如图所示。
关于 node.js string 的长度上限,主要和 V8 引擎「压缩指针」技术有关。按个人理解,其通过压缩指向变量的地址(64 位)中固定的 32 位的方式,从而减少引擎的内存占用。
代码细节
由于需要快速访问某地址,因此缓存的数据结构必须是个对象,即 INodeGraph。

