2015-07-03 7 views
6

In C si richiede esplicitamente e si gestisce la memoria sull'heap, quindi l'interazione con l'heap è ben definita/apparente. Come si ragiona su questo in Node.js?In Node.js, quando i dati sono memorizzati nell'heap?

sotto-domande:

  • dove/come vengono memorizzate le funzioni?
  • ci sono determinati oggetti/primitive che vengono sempre memorizzati nell'heap? (ad esempio i buffer)
  • i dati migrano dallo stack verso l'heap? quando?

Anche i riferimenti a buone risorse su questo argomento sarebbero apprezzati, grazie.

+0

Una risposta a questa sarebbe sicuramente essere utile per individuare eventuali perdite di memoria durante lo sviluppo. Bella domanda –

risposta

0

Non ti importa di stack vs heap né di liberare memoria. Succede automaticamente poiché Node.js offre un garbage collector di tracciamento preciso. Alcuni dati sono memorizzati nell'heap GC. Alcuni dati sono in pila. Generalmente non si può dire perché dipende dalle ottimizzazioni eseguite dal compilatore JIT in fase di runtime. Gli strumenti di profiling potrebbero fornire informazioni specifiche sull'applicazione.

Quanto a risorse diverse di memoria (ad esempio file e socket), utilizzare finally:

var file = open(…); 
try { 
    … 
} finally { 
    close(file); 
} 
+0

Penso che quello che intendevi dire è "Tu ** non dovresti ** preoccuparti dello stack vs heap" ... ovviamente alcune persone si preoccupano, altrimenti questa non sarebbe una domanda. –

+0

@rightfold Sono più interessato a concettualizzare il modo in cui il runtime potrebbe andare a prendere queste decisioni per capirlo/riconoscerlo durante lo sviluppo. Ovviamente puoi trattarlo come una scatola nera, ma penso che una comprensione di questo dovrebbe essere utile alla maggior parte degli sviluppatori di Node.js. –