MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Löschen großer Javascript-Objekte, wenn dem Prozess der Arbeitsspeicher ausgeht

delete in Javascript wird NICHT verwendet, um Variablen zu löschen oder Speicher freizugeben. Es wird NUR verwendet, um eine Eigenschaft von einem Objekt zu entfernen. Sie können diesen Artikel finden auf delete Betreiber eine gute Lektüre.

Sie können einen Verweis auf die in einer Variablen enthaltenen Daten entfernen, indem Sie die Variable auf etwas wie null setzen . Wenn es keine anderen Verweise auf diese Daten gibt, sind sie für die Garbage Collection geeignet. Wenn es andere Verweise auf dieses Objekt gibt, wird es nicht aus dem Speicher gelöscht, bis es keine Verweise mehr darauf gibt (z. B. keine Möglichkeit für Ihren Code, darauf zuzugreifen).

Was die Speicheranhäufung verursacht, es gibt eine Reihe von Möglichkeiten, und wir können nicht wirklich genug von Ihrem Code sehen, um zu wissen, welche Referenzen festgehalten werden könnten, die den GC davon abhalten würden, Dinge freizugeben.

Wenn dies ein einzelner, lang andauernder Prozess ohne Unterbrechungen in der Ausführung ist, müssen Sie möglicherweise auch den Garbage Collector manuell ausführen, um sicherzustellen, dass er die Möglichkeit hat, von Ihnen freigegebene Dinge zu bereinigen.

Hier sind ein paar Artikel zum Aufspüren Ihrer Speichernutzung in node.js:http://dtrace.org/blogs/bmc/2012/05/05/debugging-node-js-memory-leaks/ und https://hacks.mozilla.org/2012/11/tracking-down-memory-leaks-in-node-js-a-node-js-holiday-season/ .