Java - einfache Möglichkeit, die Struktur eines serialisierten Objekts zu überprüfen?

Ich habe eine Klasse und würde gerne sehen, welche Unterobjekte den meisten Platz einnehmen, wenn ein Objekt aus dieser Klasse serialisiert wird. Gibt es ein nettes Werkzeug/einen Weg, es zu tun, außer den Code zu betrachten und ihn manuell zu analysieren?

Zum Beispiel möchte ich, dass das Tool sagt "Mitglied a besetzt 20%, b 30% und Mitglied c belegt 50%".

Vielen Dank

P.S. Ich habe einige verwandte Fragen gefunden, aber dort keine Antwort auf meine spezifische Frage gefunden.

5
hinzugefügt bearbeitet
Ansichten: 1
Siehe meinen Kommentar zu # alexey28 - Ich interessiere mich für die Struktur des serialisierten Objekts, nicht für die Struktur des Objekts im Speicher
hinzugefügt der Autor duduamar, Quelle
Es gibt keine 'Unterobjekte' in Java. Und es ist kein semantisches Problem. Wie zählen Sie die Freigabe, wenn zwei Mitglieder eines Objekts selbst Mitglieder haben?
hinzugefügt der Autor aalku, Quelle
hinzugefügt der Autor npe, Quelle

3 Antworten

Die einzige relativ schnelle Möglichkeit, die Größe des Objekts zu zählen, besteht darin, zuerst das gesamte Objekt zu schreiben, die Verwendung zu zählen (z. B. in einen ByteArrayOutputStream zu schreiben) und dann jedes Objekt zu schreiben, auf das verwiesen wird.

Es gibt ein paar davon zu berücksichtigen:

  • Der ObjectOutputStream führt einige Zwischenspeicher aus, um mit einem einfachen Zeiger auf ein zuvor geschriebenes Objekt verweisen zu können. Verwenden Sie die reset() -Methode, um diesen Cache zu löschen.
  • Jeder neue Objekttyp, der geschrieben wird, hat zuerst die Klassenbeschreibung. Der Aufwand hierfür hängt von der Anzahl der gleichartigen Objekte ab, auf die Sie sich beziehen.
  • Es gibt einen (kleinen, 4 Byte) Overhead, um den ObjectOutputStream zu initialisieren.

Für die Beschreibung des Protokolls lesen Sie diese Beschreibung .

1
hinzugefügt
So habe ich es mir gedacht, es sei denn, ich werde eine bessere Antwort bekommen. Vielen Dank.
hinzugefügt der Autor duduamar, Quelle
1
hinzugefügt

Nun, ich habe noch nie von einem solchen Werkzeug gehört. Aber ich denke, es gibt eine Beziehung zwischen der Objektgröße im Speicher und der serialisierten Objektgröße. So können Sie versuchen, einen Profiler zu verwenden: VisualVM , das in JDK oder meinem Lieblings YourKit Profiler .

1
hinzugefügt
Es gibt eine Beziehung, aber keine starke Relation - die Klasse kann wählen, einige Mitglieder zu serialisieren und andere zu verwerfen. Das kann das Bild total verändern ...
hinzugefügt der Autor duduamar, Quelle
Läßt Weg für einige andere Antworten. Wenn niemand ein solches Werkzeug kennt und Sie eine Präzisionsmessung benötigen, müssen Sie Ihre eigene schreiben, um es zu tun.
hinzugefügt der Autor alexey28, Quelle