wieviele objekte am heap??

  • Themenstarter Themenstarter evilknevil
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
E

evilknevil

Gast
Person Personen[] = new Pers [2];

hm haben das als testfrage bekommen! wieviel objekte werden da am heap angelegt??

danke mfg chris
 
Wenn die Variable Personen dein Haufen (heap) sein soll sind es 2. Aber für mich ist das ein Feld, zu einem heap gehört für mich noch ein bischen Code drumherhum.

Gruß Chris
 
nein ich denke er meint den Heap von Java. er will wissen wieviele Elemente sich nach der Deklaration auf dem Heap befinden. Er meint nicht die Datenstruktur Heap...

Glaube ich....
 
evilknevil hat gesagt.:
Person Personen[] = new Pers [2];

hm haben das als testfrage bekommen! wieviel objekte werden da am heap angelegt??

danke mfg chris

Bis jetzt nur eins, Denn dein array sieht bis jetzt nur so aus: {null, null}

Aber wenn du den Array füllst sind's. 3

Bin mir aber auch nicht 100%ig sicher.
 
ich glaube stevg hat recht. 2 speicherstellen für die beiden personen und eine für den array wo auf die entsprechenden stellen gezeigt wird.. allerdings bin ich mir nicht sicher ob nicht doch alle 3 speicherstellen bei der initialisierung des arrays angelegt werden und erst nachher bei personen[0] = ... etwas in die stelle geschrieben wird. ???:L
 
Roar hat gesagt.:
allerdings bin ich mir nicht sicher ob nicht doch alle 3 speicherstellen bei der initialisierung des arrays angelegt werden und erst nachher bei personen[0] = ... etwas in die stelle geschrieben wird. ???:L

Ne das macht er erst nacher:

Code:
Object x = new Object(); // Speicherbereich A
Object xs[] = new Object[3];
xs[0] = x; // xs[0] zeigt jetzt auf den Speicherbereich A

Denn wenn er auch bei einer null-referenz Speicher belegen würde, müßte er dieses immer nach Zeile 3 wieder freigeben, da ja xs[0] ab dann auf den Speicherbereich A zeigt. Und einen Speicher zu belegen den man eh wieder freigeben muss ohne ihn jemals genutzt zu haben macht in meinen Augen keinen Sinn.
 
Phaxx hat gesagt.:
stevg hat gesagt.:
...müßte er dieses immer nach Zeile 3 wieder freigeben...
Ist dies nicht erst der Fall, wenn der Garbage Collector den Speicher wieder frei gibt?
jap. Irgendwann nach zeile 3. Er würde halt erstmal belegt werde, obwohl er nie genutzt wird.
@becstift: diesen Beitrag habe ich 5 mal editiert 😀
 
danke, ich hät auch drei gesagt!
aber wenn man sich nicht sicher is fragt man halt mal
thx
chris
 
Soviel ich weiss, wird bei der Zeile (Beispiel)
Code:
int[] daten;
noch nichts im Heap angelegt. Allerdings wird in der Zeile
Code:
daten = new int[100];
Speicherplatz für 100 Elemente im Heap angelegt. Bei Objekt-Arrays gilt dasselbe.
 
Mhm - bring ich jetzt Heap verwaltung und Speicherverwaltung durcheinander.

Weil wenn ich schreib
Code:
Object[] ob = new Object[10]
kann doch java noch nicht wissen, was für Objekte ich verwenden werde, daher ist es doch unsinnig hier schon Speicher zu belegen ???:L
 
Als ich weiss nur, das ich mal
Code:
Color[] table = new Color[256][256][256];
gecodet habe und beim Starten ein OutOfMemory vorbeikam.
 
Grizzly hat gesagt.:
Als ich weiss nur, das ich mal
Code:
Color[] table = new Color[256][256][256];
gecodet habe und beim Starten ein OutOfMemory vorbeikam.

Naja 16.777.216 Referenzen 'die auf null zeigen' nehmen auch schon ziehmlich viel platz weg.
<edit>
Die Aussage war stuss, aber die erste Dimension zeigt hier bereits auf 256 Objecte und die zweite sogar auf 65536, aber eine OutOfMemory ???:L Ich glaube ich laß die Spekulationen sein, am besten es ließt mal jemand nach
</edit>

Und wie deathbyclown bereits gesagt hat: worher soll er wissen wieviel Speicher überhaubt gebraucht wird ? Es macht auch irgendwie keinen Sinn, denn wie bereits gesagt kann es auch sein das die Objecte, die später in den Array sollen, bereits existieren, sodass der reservierte Speicher übehaupt nicht benötigt wird.
 
Grizzly hat gesagt.:
Als ich weiss nur, das ich mal
Code:
Color[] table = new Color[256][256][256];
gecodet habe und beim Starten ein OutOfMemory vorbeikam.
Gib ihm doch einfach mehr Speicher :lol:
 
deathbyaclown hat gesagt.:
Grizzly hat gesagt.:
Als ich weiss nur, das ich mal
Code:
Color[] table = new Color[256][256][256];
gecodet habe und beim Starten ein OutOfMemory vorbeikam.
Gib ihm doch einfach mehr Speicher :lol:
Na, ich weiss nicht
???:L . Besser wäre es, wenn man Farben angeben könnte, ohne jedesmal ein Color-Objekte instanzieren zu müssen.

Wahrscheinlich reserviert er auch nicht den Platz für das komplette Objekt, aber wenigstens für eine Referenz. Und wahrscheinlich sind diese Referenzen bzw. Pointer nicht nur - wie bspw. in C - so um die 4 Byte groß... ???:L
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben