5

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:

  1. 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
  2. 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?

risposta

0

si hanno due bretelle

var i = 10000000; for (;i;i--) {a += i; b += i;}}//<-----here 

forse è per questo le funzioni si comportano male.

+0

Siamo spiacenti, era un errore di battitura e non ho potuto modificare la domanda. – Green