2015-10-29 4 views
13

Esiste un modo per disattivare esplicitamente le esecuzioni di GC (almeno quelle che richiedono più tempo, come gli interrupt di GC nello spazio vecchio) durante il periodo di tempo specificato, mentre si eseguono alcuni codici sensibili a ritardi? Qualcosa del genere:Disabilitare la garbage collection di node.js per un po 'di tempo

disableGc(); 
runCodeWithoutDelays(); 
enableGc(); 

Probabilmente utilizzando alcune opzioni di nodo o moduli nativi? Oppure posso scrivere il mio modulo, c'è una API in V8 per quello?

+0

Hmmm, [questo] (https://github.com/bnoordhuis/node-idle-gc) funzionerà per voi? – thefourtheye

+0

Non proprio. Ciò attiverà le principali esecuzioni di GC non significative (mark-sweep-compact) che sono piuttosto pesanti e comportano lunghi ritardi rispetto alle rapide esecuzioni incrementali. Piuttosto che eseguire GC da solo, mi piacerebbe bloccare GC per qualche tempo e rilasciarlo nuovamente al normale funzionamento. – artch

+0

Raccomanderei di sollevare questa domanda come un bug nel repository Node.js e nella mailing list v8. – thefourtheye

risposta

3

Per quanto ne so non è possibile arrestare manualmente il garbage collector di v8, l'unica cosa che si può fare è avviare il processo gc manualmente eseguendo global.gc() ma non arrestando il processo di v8.

0

Un'altra persona aveva la stessa domanda e ha pubblicato un problema su GitHub qui: https://github.com/nodejs/help/issues/462

risposta non è possibile disattivare il GC nel nodo, ma si può almeno modificare le opzioni di memoria per utilizzare lo spazio massimo disponibile e ritardare GC, usando --max_old_space_size, --max-semi-space-size.

Un esempio è fornito lì nel contesto.