# Speichergröße von Objekten & Referenzen



## hdi (24. Aug 2010)

Hi,

habe eine Frage zu o.g. Titel (ach ne xD)

komplexe Datentypen speichern ja eine Referenz, d.h. eine Hexadezimalzahl.
Ich versteh aber nicht so ganz wie das mit der Speicher-Reservierung da aussieht.

Also ich meine primitive Typen belegen halt einen fixen Wert, zB int 32 bit long 64 bit usw.

Aber wenn ich sowas habe:
Object o;

Erstmal steckt da "null" drin (wenns jetzt nicht zufällig eine lokale Variable ist).
Die Variable ist ja aber trotzdem an dieser Stelle schon irgendwie angelegt, also wieviel Speicherplatz
belegt das null? Ich meine also wieviel Bit.

Und wie schaut's mit einer echten Referenz aus? Was belegt so eine Hexa-Zahl?
Und überhaupt.. was belegt ein Objekt? Einfach die Summe all seiner Instanz-Variablen? Oder steckt da noch "Overhead" dahinter?

Ich hoffe es ist klar was ich meine.

Ich würd gerne wissen wie genau das aussieht im Hauptspeicher wenn man eine Variable vom komplexen Datentyp anlegt,
und wie groß da der bereich ist wenn da null oder ne Referenz drin liegt.

thx


----------



## Der Müde Joe (24. Aug 2010)

Vielleicht hilft das hier ein wenig:
VM Spec The Structure of the Java Virtual Machine
3.4ff


----------



## hdi (24. Aug 2010)

Hm leider nich so.. Also ich hab da jetzt nur diesen 2-zeiligen Absatz gefunden über die nicht-primitiven Typen. Aber von der Größe des reservierten Speichers usw hab ich nix gelesen. Steht sonst nur noch was über Rücksprungadressen usw.
Diese JLS Auszüge sind aber generell sehr schwer verständlich finde ich.

Vllt kannst du mir das in eigenen Worten erklären, dann versteh ich's auch?

Merci


----------



## lolwtfok (25. Aug 2010)

Java Tip 130: Do you know your data size? - JavaWorld


----------



## hdi (25. Aug 2010)

Danke, ich weiss allerdings noch immer nicht wieviel Speicherplatz eine _Referenz_ belegt, bzw null, falls das einen Unterschied macht. 
Die Referenzen sind doch auch im Speicher abgelegt oder nicht - Die kopiert er ja wohl nicht auf die Festplatte.

Also:


```
int i = 0; // 32 Bit im Speicher reserviert
Object o = null // ??? Bit im Speicher reserviert
o = new Object(); // Inhalt von o zB 0x23E6C, wieviel Bit belegt diese Hexadezimalzahl?
```

Danke aber soweit!


----------



## Sonecc (25. Aug 2010)

size of reference (Beginning Java forum at JavaRanch)


----------



## hdi (25. Aug 2010)

Ich glaub ich hab die Antwort:



> The reference (as opposed to the object instance) is four bytes. This should be specified somewhere in the JVM specification. In some cases it may actually take up more than four bytes - e.g. 8 bytes on a 64-bit machine - but it will still behave as if it's only got four bytes available.



Klingt sinnvoll, im Nachhinein überlegt hätte ich mir das wohl auch einfach selber ausrechnen können  Und jetzt wo ich das schreibe wird mir klar: DAS heisst also 32 Bit System Lol bin ich behindert ey.. Danke für eure Hilfe.

edit: sonecc ja danke genau das hab ich auch grad gefunden


----------



## musiKk (25. Aug 2010)

Ich weiß nicht, ob die Größe eines Objektes schon in einem der Links oben schon beantwortet wurde... ansonsten steht das auch in der JVMS.


----------



## hdi (27. Aug 2010)

Dank euch!!


----------

