Laut Google verwendet V8 eine effiziente Speicherbereinigung, indem es einen "stop-the-world, generational, accurate, garbage collector" einsetzt. Teil des Anspruchs ist, dass der V8 die Programmausführung stoppt, wenn er einen Speicherbereinigungszyklus ausführt.
Eine offensichtliche Frage ist, wie können Sie einen effizienten GC haben, wenn Sie die Programmausführung anhalten?
Ich habe versucht, mehr zu diesem Thema zu finden, denn ich würde gerne wissen, wie sich der GC auf die Reaktionszeit auswirkt, wenn Sie möglicherweise mehrere zehntausend Anfragen pro Sekunde auf Ihren node.js-Server richten.
Jede Expertenhilfe, persönliche Erfahrung oder Links wären sehr willkommen
Danke
"Effizient" kann mehrere Dinge bedeuten. Hier bezieht es sich wahrscheinlich auf einen hohen Durchsatz . Wenn Sie sich die Reaktionszeit ansehen, interessieren Sie sich eher für Latenz , was in der Tat schlimmer sein könnte als bei alternativen GC-Strategien.
Die wichtigsten Alternativen zu Stop-the-World GCs sind
Beide müssen zusätzliche Arbeit ausführen, um angesichts der gleichzeitigen Änderung des Heapspeichers korrekt zu sein (z. B. wenn ein neues Objekt erstellt und an ein bereits gescanntes Objekt angehängt wird, muss diese neue Referenz beachtet werden). Dies beeinflusst den Gesamtdurchsatz, d. H. Es dauert länger, den gesamten Haufen tatsächlich zu reinigen. Der Vorteil ist, dass sie (wenn überhaupt) das Programm nicht (sehr) sehr lange unterbrechen, so dass die Latenz gering ist (äh).
Obwohl die V8-Dokumentation immer noch einen Stop-the-world-Sammler erwähnt, scheint es, dass die V8 GC ist seit 2011 inkrementell . Obwohl es die Programmausführung hin und wieder stoppt, tut es nicht 2 Stoppen Sie das Programm so lange, bis der gesamte Heap gescannt ist. Stattdessen kann es beispielsweise nach einigen Millisekunden suchen und das Programm fortsetzen.
1 "Mutator" ist die GC-Terminologie für das Programm, dessen Heap Speicherbereinigung ist.
2 Das ist zumindest im Prinzip wahrscheinlich konfigurierbar.
Tags und Links garbage-collection node.js v8