Ich habe ein serialisiertes Objekt auf der Festplatte eines Patricia-Trie (https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/trie/PatriciaTrie.html). Auf der Festplatte belegt es etwa 7,4 GB. Ich benutze einen 64 GB RAM Server. Bei der Deserialisierung steigt der Speicherverbrauch des entsprechenden Prozesses auf bis zu 40 GB. Ist das sinnvoll, weil die höchste Antwort bei Serialized object size vs in memory object size in Java besagt, dass "die Größe im Speicher in der Regel zwischen der Hälfte und dem Doppelten der serialisierbaren Größe liegt!" Ich habe erwartet, dass die Speichergröße nicht mehr als 15 GB beträgt, aber 40 GB sind zu viel, da auch andere Prozesse geladen werden.Java: riesiger Unterschied in der Größe des serialisierten Java-Objekts und der Speicherbelegung bei der Deserialisierung
Ich dachte an http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html für die Messung der Größe im Speicher, aber Calculate size of Object in Java sagt, dass es "verwendet werden kann, um die Implementierung spezifische Approximation der Objektgröße zu erhalten." Also, es wäre wieder nur ein ungefähres Maß.
Gibt es etwas, das ich hier vermisse? Ich schließe auch die Datei und den gepufferten Reader. Was könnte die ganze Erinnerung an sich reißen? Ich kann den Code aus unternehmenspolitischen Gründen nicht teilen - jegliche Hilfe oder Hinweise wären sehr willkommen. Danke
Was ist mit Ihrem XMX- ist eingestellt? –
Die Größe hängt normalerweise davon ab, um welchen Objekttyp es sich handelt. Das Speicherobjekt enthält Eigenschaften/Felder, die von der Basisklasse geerbt wurden und die nicht serialisiert sind. – user5226582
@JoeriHendrickx Xmx ist auf 60G eingestellt. Der laufende Befehl beginnt mit java -Xmx60g -d64 ... – pandeconscious