Ich habe ein Array namens globalArrayAllTrades
, wie Sie unten sehen. Ich möchte einfach das Datum in eine neue Kopie des Arrays INVERTIEREN. Also ich durchschlinge, ein neues Objekt erstellen und es dem neuen Array hinzufügen - einfach.Array kopieren -> Stack- oder Heap-Überlauf?
Dann funktioniert die Funktion genau wie erwartet. ABER wenn das Array zu viele Objekte enthält, schlägt der Code mit einem "FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - Prozess nicht genügend Arbeitsspeicher".
Mein Laptop hat 8 GB Speicher ... Wenn der NODEJS-Prozess abstürzt, verwendet es etwa 1,5 GB und etwa 70% der gesamten verfügbaren Speichermenge wird verwendet.
Ich führe die NODEJS App mit dem Parameter: --max_old_space_size=5000
, die normalerweise alles regelt. Aber nicht dieses und ich habe viele verschiedene Möglichkeiten versucht, um die gleiche Funktion zu programmieren - aber jedes Mal - es scheitert ... es sei denn, das ursprüngliche Array ist kleiner.
Wie kann ich dieses Problem beheben?
function invertTrades(){
var original = globalArrayAllTrades.slice();
globalArrayAllTrades.length = 0;
globalListAllTrades.length = 0;
for(var i = 0; i < original.length; i++){
var objS = original[i];
var objE = original[original.length-1-i];
var objInv = new TradePoint(objS.number, objS.matchdate, objE.price, objE.size, objE.issell);
globalArrayAllTrades.push(objInv);
globalListAllTrades[objInv.matchdate] = objInv;
}
}
Diese Antwort kann : http://stackoverflow.com/questions/7193959/memory-limit-in-node-js-and-chrome-v8 – Simon
@Simon Diese Frage ist 5 Jahre alt. Eine der Antworten besagt, dass das Speicherlimit entfernt wurde. – Barmar
Was ist 'globalListAllTrades'? Es scheint, dass Sie es als Schlüssel-Wert-Speicher (Objekt) verwenden, also wird '.length = 0' es kaum leeren. – Bergi