# wie viel speicher braucht eigentlich ein array?



## hirion (25. Jun 2006)

hallo!

mal eine theoretische frage:
ich möchte auf benutzereingaben gewisser zeichen reagiern. zb benutzer gibt ein 'h' und dieses wird rot. ich hab mir überlegt dass ich jetzt die Color in einem Array speichern könnte und so konstanten (in bezug komplexität) zugriff auf die farbe hätte.
also so:

```
Color[] bucket = new Color[Character.MAX_VALUE];
bucket['h'] = Color.red;
```

jetzt aber meine frage, wie effizient ist dies beim speicherverbrauch. ein array ist ja im grunde eine liste mit referenzen auf speicherbereiche. werden jetzt bei einem Array der länge 50 -> 50 Speicherbereiche reserviert oder nur eine liste erstellt die platz für 50 einträge bietet?

also beispiel:
ein Speicher mit 100 speicherzellen. angenommen ein Object braucht 1 speicherzelle.
es wird
Object[] b = new Object[50]
erzeugt
und in diesem array 3 objekte gespeichert.

braucht das array nun 50 speicherzellen? sprich die hälfte des speichers. oder nur die 3 speicherzellen die die objekte benötigen?

danke und mfg
chris


----------



## Redfrettchen (25. Jun 2006)

Hi,
<afaik>
Es wird der Speicher für 50 Einträge reserviert, diese Einträge bieten aber nur genug Platz, um eine Referenz auf Objekte zu speichern. Am Anfang wird jedes Objekt-Array mit null-Einträgen initialisiert. Wenn ein Feld mit einem Objekt initialisiert wird, dann wird nur die Referenz im Array gespeichert, das Objekt verbraucht aber natürlich selbst auch Speicherplatz.
</afaik>


----------



## hirion (25. Jun 2006)

also haben die einzelnen array buckets die größe der referenz und nicht des objektes selbst?
(ich schätz mal bei elementaren datentypen nehmen die buckets die größe des wertebereichs an?)

ich schau mal ob ichs irgendwie rausmessen kann. ich poste dann meine erfahrungen

edit: ok ich habs jetzt mit dem netbeans profiler mal ausgemessn und es sieht so aus als ob es stimmt:


```
Object[] obj = new Object[Character.MAX_VALUE];         56B
int[] Int = new int[Character.MAX_VALUE];               262.152B
```

sofern ich diesen profiler richtig verstanden habe


----------

