Ich versuche, den Inhalt eines Heapdump zu verstehen, der von Google Chrome-Tools generiert wird. Ich verstehe, dass es bereits einen In-Browser-Heap-Dump-Inspektor gibt, aber ich bin daran interessiert, eine CLI zu schreiben, die einen JS-Heap-Dump als Übung analysiert. Ich kann keine Dokumente über die Struktur des Inhalts eines Heap-Dumps finden. Sie sind für Menschen lesbar, aber das Format ist nicht sehr klar aus der Inspektion der Datei
Hier ist ein zufälliges Snippet:
%Vor%Gibt es Dokumente zur Struktur von Chrome-Heap-Dumps? Gibt es ein standardmäßiges Javascript-Heap-Dump-Format oder hat jede Engine ihren eigenen proprietären Standard?
Ausgezeichnete Fragen! Der Reihe nach:
Ja! Die Google Entwickler-Dokumentation How zum Aufzeichnen von Heap-Snapshots beschreibt den Inhalt eines Heap-Dumps:
- Konstruktor repräsentiert alle Objekte, die mit diesem Konstruktor erstellt wurden.
- Anzahl der Objektinstanzen wird in der # Spalte angezeigt.
- Die Spalte Flache Größe zeigt die Summe der flachen Größen aller Objekte an, die von einer bestimmten Konstruktorfunktion erstellt wurden. Die flache Größe ist die Größe des Speichers, der von einem Objekt selbst gehalten wird (im Allgemeinen Arrays und Saiten haben größere flache Größen). Siehe auch Objektgrößen .
- Größe beibehalten zeigt die maximal beibehaltene Größe unter demselben Objektsatz an. Die Größe des Arbeitsspeichers, der einmal freigegeben werden kann Objekt wird gelöscht (und seine Abhängigkeiten sind nicht mehr erreichbar) heißt die beibehaltene Größe. Siehe auch Objektgrößen .
- Entfernung zeigt den Abstand zum Stamm mithilfe des kürzesten einfachen Pfads von Knoten an.
und hier ist der Heap-Dump der Chrome-Entwicklungstools genau dieser Seite, den sie in Tabellenform anzeigen:
Sie werden bemerken, dass das Schema der Struktur der oben zitierten Dokumentation folgt:
Als nächstes haben Sie gefragt:
Nein, ab September 2016 gibt es kein Standard-Heap-Dump-Format . Jede Engine hat ihr eigenes Format, da das Heap-Dump-Format jeder Engine ihre Heap-Struktur widerspiegelt, die von ihrem Speicherverwaltungsschema abhängig ist, wie Sie vielleicht vermuten. Beachten Sie jedoch, dass es im Zusammenhang mit der Standardisierung von Dumps für nodejs eine aktive Diskussion gibt - ein offenes Problem auf Github .
Weil ES LEBT !!! I.e. das DOM ist flüssig! Es ist eine baumartige Struktur, die sich jederzeit drastisch verändern kann! Jede Fluktuation in den Inhalten Ihres Heap-Dump spiegelt dies wider, und deshalb sind die Profilerstellungs- und Analyse-Dienstprogramme in Chrome Dev Tools so erstaunlich - und so hilfreich!
Tags und Links javascript google-chrome-devtools v8 heap-dump