provo al profilo dell'utilizzo della memoria in nodejs (0.10.35), ho creato 2 file qui sotto e gestito con il nodo --expose-gcJavaScript utilizzo della memoria a ciclo
var ae b var sono inizializzate come vuoto stringa
un ciclo viene eseguito per fare un e b grandi
stampe setInterval l'utilizzo della memoria ogni 1 secondo
la x >> 20 operatore è equivalente a Math.floor (x/1024/1024) per dare il risultato in MB
//file 1.js
var a = '', b = '', n = 0;
var i = 10000000; for (;i;i--) {a += i; b += i;}}
setInterval(function(){
var m = process.memoryUsage();
console.log(++n,m.rss>>20,m.heapTotal>>20,m.heapUsed>>20);
},1000);
setTimeout(function(){
global.gc();
console.log('1st garbage collect');
},2500);
setTimeout(function(){
a = null;
console.log('var a cleared');
},5000);
setTimeout(function(){
global.gc();
console.log('2nd garbage collect');
},7500);
//file 2.js is similar to file 1 except that var a and var b are changed at separate loops
var i = 10000000; for (;i;i--) {a += i;}
var i = 10000000; for (;i;i--) {b += i;}
ho ottenuto i risultati dalla console
1.js 2.js
1 1098 1073 1069 1407 1378 1375
2 1098 1073 1069 1407 1378 1375
1st garbage collect
3 1098 1073 1069 715 696 688
4 1098 1073 1069 715 696 688
var a cleared
5 1098 1073 1069 715 696 688
6 1098 1073 1069 715 696 688
7 1098 1073 1069 715 696 688
2nd garbage collect
8 19 11 1 20 12 1
Le mie domande sono:
- L'a.length e b.length è solo ~ 65 MB, il motivo per cui l'utilizzo della memoria ~ 1.000 MB nel file 1.js e ~ 1400 MB nel file 2.js
- Dopo la prima garbage collection, non sarebbe var b essere raccolta ma sembra che l'utilizzo della memoria sia ancora> 1000 MB per il file 1.js, ma ~ 700 MB nel file 2.js?
Dopo la seconda raccolta dati inutili, la memoria scende a < 20 MB, come previsto. Sto guardando qualcosa di sbagliato qui?
Siamo spiacenti, era un errore di battitura e non ho potuto modificare la domanda. – Green