Einfache Methode die Groesse eines Objekts zu ermitteln?

S

SlaterB

Gast
naja, man kann sich die Arbeitsspeicher-Belastung byte-genau ausgeben lassen,
1000 oder 1 Mio. der Objekte erzeugen (ein Array dafür am Anfang schon eingerechnet, wie man eine Waage mit Schüssel eicht ;) )
und danach wieder nachschauen, das ist schon ziemlich genau

edit:
a la
Java Practices -> Get size of object in memory
Suchbegriff 'java size of object in memory'
 
S

Spacerat

Gast
Ganz klar... Nein.
Es gibt in Java auch kein "sizeOf". Wozu auch, in C++ wird das ja nur verwendet, um Zeiger zu positionieren und Speicherplatz zu berechnen. In Java gibt es aber nur einen Zeiger und dieser zeigt auf null (Deswegen heisst's NullPointerException und nicht NullReferenceException ;)). Auch um die Speicherverwaltung muss man sich in Java nur relativ wenig Gedanken machen (heisst nicht, dass man überhaupt keine machen muss ;)).
@SlaterB: Tolle Idee XD. Ich wollte gerade noch was über Serialisierung in ein ByteArrayStream zum Besten geben... dann fiel mir auf, dass auch dessen Länge nicht wirklich die Grösse eines Objektes darstellt.
 
Zuletzt bearbeitet von einem Moderator:
S

Spacerat

Gast
:lol:
Was sind das eigentlich alles für Versuche? Gehen alle davon aus, dass ein Objekt nur Speicher belegen kann, wenn es instanziert ist. Wenn ich danach feststellen wollte, dass ich für ein derartiges Objekt keinen Speicher mehr habe...:autsch: Okay, dann eben anders... Wie wär's mit rekursiver Aufsummierung von [c]getClass().getFields()[/c]?
 
S

SlaterB

Gast
ganz so einfach zu summieren ist es nicht weit ein gewisses Speicherlayout zu beachten ist,
8 boolean hintereinander passen vielleicht in ein Byte (evtl. nur als Array), ein boolean und danach ein char brauchen aber zwei Bytes,
7 Bit vom ersten verschwendet weil der char erst beim zweiten Byte beginnt und ähnliche Scherze,
wobei jetzt nur vermutet/ grob erinnert

am besten man nimmt gar keine Klassen, sondern speichert alles in humanen byte[]
und rechnet jedes Mal aus, was das Objekt jetzt für einen Zustand hat ;)
 
S

Spacerat

Gast
@SlaterB: Und ob das relativ einfach ist:
1. Alles unterhalb 4 Bytes benötigt 4 Bytes.
2. Double und Long benötigen 8 Bytes, alles andere 4, inkl. die Array-Referenzen.
3. Ein Array selbst benötigt 16 + ((4 * length) % typeSize + 1) * 8 (müsste so hinhauen :bahnhof:, wie's genau geht, findet ihr unter makis Link). Leider finde ich dort die Kleinigkeit nicht, dass (primitive) booleans auf 1 Byte erweitert werden.

Das widerspricht sich jetzt zwar anscheinend mit vorhergehenden posts, aber diese Methode ist ja nun auch nicht wirklich einfach. Es bleibt also dabei: 'ne einfache Methode gibt's nicht.
 
S

SlaterB

Gast
sirbender: gibt es eine einfache Methode [..]?
maki: Einfach ist anders.
Slater: ganz so einfach zu summieren ist es nicht
Spacerat: Und ob das relativ einfach ist
Spacerat: aber diese Methode [wohl eine andere] ist ja nun auch nicht wirklich einfach.
Spacerat: Es bleibt also dabei: 'ne einfache Methode gibt's nicht.

alles nicht einfach hier ;)
 

sirbender

Top Contributor
Gut. Ich bin gerade dabei einfach alle Objekte deren Groesse ich wissen will zu serialisieren und dann die Groesse des resultierenden byte[] zu nehmen.

Da ich die unterschiedlichsten, komplexen Objekte habe scheint mit das die beste Loesung. Ich hatte gehofft es gibt eine bessere.
 
M

maki

Gast
Wozu brauchst du das denn?

Einfach wäre, einen Profiler zu nehmen ;)
Ist aber natürlich keine Laufzeitlösung, denn diese sind nciht einfach..
 
S

Spacerat

Gast
Serialisierung ist dabei auch noch die schlechteste, denn es ist ja nie sichergestellt, dass das ganze Objekt serialisiert wird. In der Regel wird es das auch kaum.
 

planetenkiller

Aktives Mitglied
Es gibt die Methode getObjectSize bei Klasse Instrumentation ( Instrumentation (Java Platform SE 6)) ).

An eine Instanz von Instrumentation kommt aber nur innerhalb von "Java Agents" heran (siehe class comment der instrument Klasse).

*Edit*:
Achtung: So wie ich das versehe, wir die getObjectSize nicht den Referenzen folgen. Die Bereits geposteten Ansätze tun das.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Einfache Navigations-App schnell selber Programmieren? Bitte um Ideen und Anregungen. Allgemeine Java-Themen 17
J Einfache Sprachsteuerung Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
K Einfache Verkettete Liste mit Node Allgemeine Java-Themen 3
D RMI Einfache Chat-Anwendung mit RMI Allgemeine Java-Themen 0
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
D einfache Filterung optimieren Allgemeine Java-Themen 16
M Einfache Kundenverwaltung, guter Programmierstil Allgemeine Java-Themen 3
S YUV to RGB (einfache Berechnung) Allgemeine Java-Themen 5
N einfache Klassen Allgemeine Java-Themen 18
M Schnelle Scriptsprache für einfache Funktionen? Allgemeine Java-Themen 5
R Einfache Matheaufgabe - Daten auf Anzeigebereich verteilen Allgemeine Java-Themen 4
E einfache grafische Oberfläche wie in MS C#? Allgemeine Java-Themen 6
V Einfache toString() generieren? Allgemeine Java-Themen 6
E einfache Frage zu Vector Allgemeine Java-Themen 8
E Einfache Frage zu ListIterator Allgemeine Java-Themen 10
E einfache Frage zu getRealPath(.) Allgemeine Java-Themen 2
E einfache Frage zu protected Allgemeine Java-Themen 10
E einfache Frage zu verdeckten Membern Allgemeine Java-Themen 2
E Einfache Fragen zu Dateien Allgemeine Java-Themen 7
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
D Methoden Methode zum Steinschnitt Allgemeine Java-Themen 2
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
D Returnwert aus einer Methode gerundet ausgeben lassen Allgemeine Java-Themen 2
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
snipesss Methode greift nicht auf JTextPanel zu Allgemeine Java-Themen 3
R Methode in Methode voraussetzen Allgemeine Java-Themen 8
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben