Speicher und Speicherbelegung
Crashkurs Speicherbelegung
Hier mal eine kurze Einführung ins Thema Speicher bzw. Speicherbelegung in Java.
Version 1: <code=java> class MyInstance{
private int var = 10;
} </code=java>
Version 2: <code=java> class SharedVars{
public static final int SHARED_VAR = 10;
}
class MyInstance{
private int var = SharedVars.SHARED_VAR;
} </code=java>
Variante 2 belegt nun (egal wieviele Instanzen von MyInstance du nun hast) nicht weniger Speicher als Variante 1, sondern mehr. Ist dir das bewusst?
Wenn wir über Speicherbedarf reden müssen wir nämlich erstmal unterscheiden zwischen den Werten, respektive den Typen, von denen wir reden: Es gibt primitve Typen (byte, short, int, long, float, double, char, boolean) und komplexe Typen (Alles andere, zB String).
Variablen eines primitiven Typs können gar nicht auf eine andere Variable verweisen! D.h. wenn du sowas hast wie int var = SharedVars.SHARED_VAR;
dann wird der Wert von SHARED_VAR kopiert, und in die var-Variable gespeichert, welche je nach Typ nun x byte Speicher belegt, zusätzlich zu dem Speicher, den die Variable SHARED_VAR belegt.
Kurze Liste von Speicherbedarf für primitive Variablen:
- byte = 1 byte (surprise ;))
- short = 2 byte
- int = 4 byte
- long = 8 byte
- float = 4 byte
- double = 8 byte
- char = 2 byte
- boolean = nicht genau definiert (auf jeden Fall nicht 1 Bit, wie man annehmen könnte. Eher 1 byte)
--hdi 09.01.2012