2016-03-25 6 views
0

Ich entwickle eine Klasse, die eine Reihe von Zeilen aus einer Tabelle in Java darstellt. Die Zeilen können entweder in einem kompakten oder erweiterten Format vorliegen. Mit einem Funktionsaufruf kann das interne Format im Objekt erkannt werden.Schätzung des Speicherbedarfs in Java

Ich habe versucht, einen Komponententest zu schreiben, um den Speicherabdruck dieses Objekts in kompaktem und erweitertem Format zu verstehen. Ich habe dafür den Memorymeter https://github.com/jbellis/jamm) verwendet. Ich habe festgestellt, dass die Tiefe des Objekts unterschiedlich ist, auch wenn die zugrunde liegenden Daten in verschiedenen Läufen gleich bleiben. Ich bin ein bisschen verwirrt. Meine Erwartung ist, dass das Traversieren durch den Objektgraphen mir eine korrekte Schätzung der Größe (Objekt) geben sollte. Könnte das ein Problem mit dem Paket sein, das ich verwende, oder ist meine Erwartung falsch?

Antwort

1

Wenn der zu testende Code eine Lazy-Initialisierung verwendet oder die Testfälle unterschiedliche Operationen ausführen, können sich die tatsächlichen Instanzen im Speicher in Anzahl, Größe und gelegentlich auch Typ unterscheiden.

Ich würde überprüfen, dass Ihre verschiedenen Läufe den gleichen Testfall verwenden, und wenn sie nicht sind, würde ich nicht davon ausgehen, dass der Speicherverbrauch mit der gleichen Eingabe gleichwertig wäre.

+0

Danke für die schnelle Antwort. Wenn Sie für denselben Testfall "äquivalent" sagen, meinen Sie die gleiche Zahl (zum Beispiel: 550 Bytes für jeden Lauf) oder kleine Differenz? In C++ liefert sizeof() eine sehr genaue Schätzung für eine gegebene Plattform. – ToyElephant