0
我發現在NodeJS上使用ES6新的Set()會增加字符串輸入的內存消耗,即使重複值時也是如此。請看下面的例子,把1到1e6寫成整數和字符串。NodeJS設置()與字符串產生不合理的大內存
整數版本將保留約60MB的RSS使用量。由於字符串中的相同數字會導致RAM消耗量的增加,因此在腳本結尾使用了幾乎1GB的RAM。有任何想法嗎?
'use strict';
// Integer
let setA = new Set();
for(let i=0; i<=3e7; i++){
\t
\t setA.add(i%1e6);
\t
\t if(i%1e6 == 0){
\t \t console.log("Now: ", i)
\t \t let m = process.memoryUsage();
\t \t console.log('RSS ' + Math.round(m['rss']/1024/10.24)/100 +
\t \t \t ' MB, heapTotal ' + Math.round(m['heapTotal']/1024/10.24)/100 +
\t \t \t ' MB, heapUsed ' + Math.round(m['heapUsed']/1024/10.24)/100 +
\t \t \t ' MB, external ' + Math.round(m['external']/1024/10.24)/100 +
\t \t \t ' MB\n');
\t }
}
setA = {};
// String
let setB = new Set();
for(let i=0; i<=3e7; i++){
\t
\t setB.add((i%1e6) + '');
\t
\t if(i%1e6 == 0){
\t \t console.log("Now: ", i)
\t \t let m = process.memoryUsage();
\t \t console.log('RSS ' + Math.round(m['rss']/1024/10.24)/100 +
\t \t \t ' MB, heapTotal ' + Math.round(m['heapTotal']/1024/10.24)/100 +
\t \t \t ' MB, heapUsed ' + Math.round(m['heapUsed']/1024/10.24)/100 +
\t \t \t ' MB, external ' + Math.round(m['external']/1024/10.24)/100 +
\t \t \t ' MB\n');
\t }
}
非常感謝。在我更新到v8.0後,這不會再發生。 – Ming