PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Speicheraufwand für Java Arrays



invis-eo
25-05-2004, 16:58
Hallo zusammen

Ich hab da eine eher dumme frage aber ich kanns irgendwie nicht und im i-net weis ich auch nicht wie ich das finden soll (habs probiert).
Nun wenn ich z.b. ein Array
double[][][] a = new double[2][4][3]
hab, wie kann ich da ausrechnen wieviel speicher da benötigt wird?

für die felder selbst weiss ich ja dass 2*4*3 = 24 sind und das mal 8 Byte (double) ergibt 192 Byte.
Nun was wird für die Referenzen noch so benötigt und wieviele Referenzen sind da vorhanden? Wo wird überall eine benötigt?

Vielen Dank

Thomas Engelke
26-05-2004, 08:15
Gib's doch einfach mal über einen ObjectOutputStream aus und schau', was rauskommt. Wobei sich bei mir die Frage stellt, wofür man diese Information bräuchte, wenn es nicht um die Speicherung auf dauerhaften Datenträgern geht.

TME

anda_skoa
26-05-2004, 08:54
Ich würde sagen, dass du genau eine Referenz hast, a.

Ciao,
_

invis-eo
26-05-2004, 11:22
Original geschrieben von anda_skoa
Ich würde sagen, dass du genau eine Referenz hast, a.

Ciao,
_

nein, das ist so nicht ganz korrekt. ich hab eine Referenz auf a, allerdings auch auf a[0], a[1], a[2] und dazu noch auf a[0][0],a[0][1].a[0][2],a[0][3] und a[1][0],a[1][1],a[1][2],a[1][3]. ich weis nun allerdings ob ich auch auf a[0][0][0], a[0][0][1], etc auch noch referenzen habe. und vorallem weis ich nicht wievel speicheraufwand eine Referenz braucht.

Nun das ganze ist für die Schule (Prüfung etc. es kommen sicherlich solche Fragen). Allerdings hat das keiner aus der Klasse notiert und den Lehrer können wir auch nicht mehr fragen :-(

anda_skoa
26-05-2004, 12:26
War nur eine Vermutung.
Ich dachte er hat halt einfach nur die Referenz auf den Speicherbereich, die anderen Adresse lassen sich ja zur Laufzeit berechnen.

Ciao,
_

peschmae
26-05-2004, 12:43
die Frage ist dann wohl auf welchem "Level" in Java die Arrays implementiert wurden. In Java ist ja keine Zeigerarithmetik möglich.

MFG Peschmä

arthur
26-05-2004, 14:58
Java Arrays sind Objekte, deswegen wird es auch nur eine Referenz
geben...

gruß
Arthur

peschmae
26-05-2004, 15:45
Ja, aber ist das alles _ein_ Objekt - oder sind z.B. die Daten in eigenen Objekten? Und dann je eine Referenz drauf?

So wie ich das alles nach Core Java verstanden habe ist das auch noch n bisschen implementierungsabhängig wie das genau läuft
(Kann man immer sagen wenn man nicht genau weiss wies geht ;))

MfG Peschmä

invis-eo
26-05-2004, 16:25
Also, nochmals die gesammte Aufgabenstellung, mehr hab ich auch nicht....


Aufgabe:Gegeben ist das mehrdimensionale Array:
double [][][] a = new double[2][4][3];

Frage: Wie viel Platz benötigt das Array? (Referenzen sind 32 Bits gross.)

Lösung:
double hat 8 Bytes: 2*4*3 *8Bytes = 24*8Bytes = 192 Bytes.
Referenzen???


// ok, 32 bits also 4 Bytes pro Referenz, aber wieviele hab ich davon?

peschmae
26-05-2004, 16:53
Kannst ja mit Suns Heap Analysis Tool (Hat ohne Red) gucken: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/perf3.html

MfG Peschmä

anda_skoa
27-05-2004, 02:02
Ich tippe wirklich auf nur eine Referenz.

Alles andere wäre Speicherverschwendung, die JVM kann ja bei Bedarf "hinter den Kulissen" Pointerarithmetik machen.

Ciao,
_

dancing_coder
01-06-2004, 23:40
@invis-eo: zu welchem ergebnis kamst du jetzt letztendlich? würd mich mal interessieren.

invis-eo
02-06-2004, 06:52
also ich glaube dass ich 12 Referenzen habe, bin mir aber immernoch nicht sicher, werde am do mal den lehrer fragen. wenn es 12 sind dann würde das 12 * 4 Bytes + 196 Byetes (für die variablen) was dann total 244 Bytes machen würde.

peschmae
02-06-2004, 08:22
Wie kommst du denn ausgerechnet auf 12?
Ich tippe auch auf eine - wie anda_skoa - alles zusätzliche wäre definitiv Verschwendung.

MfG Peschmä