Warum verbraucht wiederholtes JSON-Parsing mehr und mehr Speicher?

8

Es sieht so aus, als ob die gleiche JSON-Datei in Ruby immer wieder neu sortiert wird. Betrachten Sie den Code und die Ausgabe unten:

  1. Warum wird der Speicher nicht nach der ersten Iteration freigegeben?
  2. Warum benötigt eine 116-MB-JSON-Datei nach der Analyse 1,5 GB Arbeitsspeicher? Es ist überraschend, wenn man bedenkt, dass die Textdatei in Hashes umgewandelt wird. Was vermisse ich hier?

Code:

%Vor%

Ausgabe:

%Vor%     
vrepsys 17.06.2013, 17:18
quelle

1 Antwort

1

Wenn Ruby eine JSON-Datei analysiert, werden viele Zwischenobjekte erstellt, um das Ziel zu erreichen. Diese Objekte bleiben im Speicher, bis GC zu arbeiten beginnt.

Wenn die JSON-Datei eine komplizierte Struktur hat, viele Arrays und innere Objekte, wird auch die Zahl schnell wachsen.

Haben Sie versucht, "GC.start" aufzurufen, um Ruby vorzuschreiben, ungenutzten Speicher zu bereinigen? Wenn die Menge an Speicher Es wird deutlich, dass es sich nur um Zwischenobjekte handelt, die zum Analysieren der Daten verwendet werden. Andernfalls ist Ihre Datenstruktur komplex oder es gibt etwas, das Ihre Daten nicht freigeben können.

Für große JSON-Verarbeitung verwende ich yajl-ruby ( Ссылка ). Es ist C implementiert und hat einen geringen Platzbedarf.

    
Thiago Lewin 17.06.2013 17:31
quelle

Tags und Links