为什么应用JSON.stringify会占用这么多内存

Why does applying of JSON.stringify takes so much memory?

本文关键字:内存 应用 JSON stringify 为什么      更新时间:2024-02-27

以下是NodeJS代码的示例:

function toMB (byteVal) {
    return (byteVal / 1048576).toFixed(2);
}
console.log('Node memory usage:', toMB(process.memoryUsage()['heapUsed']) + ' MB');
var veryLongString = Array(10000000).join('qweqweqweqweqweqweq');
console.log('Node memory usage after string creation:',  toMB(process.memoryUsage()['heapUsed']) + ' MB');
console.log('String memory length: ', toMB(Buffer.byteLength(veryLongString)) + ' MB');
JSON.stringify({'str': veryLongString});
console.log('Node memory usage after "JSON.stringify" apply:',  toMB(process.memoryUsage()['heapUsed']) + ' MB');

我得到了以下结果:

Node memory usage: 2.01 MB
Node memory usage after string creation: 183.25 MB
String memory length:  181.20 MB
Node memory usage after "JSON.stringify" apply: 545.37 MB

为什么应用JSON.stringify后内存使用量增长了3倍(!!!)?

不使用";veryLongString":

function toMB (byteVal) {
    return (byteVal / 1048576).toFixed(2);
}
console.log('Node memory usage:', toMB(process.memoryUsage()['heapUsed']) + ' MB');
JSON.stringify({'str': Array(10000000).join('qweqweqweqweqweqweq')});
console.log('Node memory usage after "JSON.stringify" apply:',  toMB(process.memoryUsage()['heapUsed']) + ' MB');

具有相同的结果:

Node memory usage: 2.00 MB
Node memory usage after "JSON.stringify" apply: 545.36 MB

行:

JSON.stringify({'str': Array(10000000).join('qweqweqweqweqweqweq')});

创建包含json的新字符串对象。类似这样的东西:

{"str":"qweqweqweqweqweqweq.........."}

现在我们有两个字符串:)