Maximal-Anzahl von Objekten in TreeSet

Status
Nicht offen für weitere Antworten.

Casiopaya

Mitglied
hallo zusammen!

Um meinen backtraking-algo effizienter zu gestalten schreibe ich viele objekte in ein TreeSet hinein.
Dumm nur, dass ab etwa 1.000.000 Objekten ein java.lang.OutOfMemoryError: Java heap space kommt. das verwundert mich, da ich ohne TreeSet locker 500.000.000 Objekte gleichzeit im Speicher haben kann.
weshalb gibt es mit dem TreeSet einen heap-überlauf? die verwaltungs-stukturen jedes baum-knotens können ja wohl kaum so rießig sein? (mir fallen da spontan 3 pointer ein: links, rechts, pointer auf eingefügtes objekt).

habe mir schon überlegt deshalb selbst einen binärbaum direkt mit den einzufügenden objekten zu bauen (dürfte leicht sein, ich brauch nur einfügen und suchen, nicht aber löschen) nur wollte ich zur sicherheit hier nochmal nachfragen. das problem daran ist dann aber übrigens, dass ich schnell einen entarteten baum bekommen könnte. ohne AVL ist O(log(n)) eben nicht mehr garantiert.

vielen dank + grüße
Vasi
 
Moin,

das kommt daher, dass Dein Programm den erlaubten Speicher überschreitet, der für Java-Programme ausgelegt ist (standardmäßig 64MB).

Das hat also nichts mit dem TreeSet zu tun, sondern nur mit dem Speicherbedarf.

Diesen kannst Du aber erhöhen und dann auch 5.000.000 Objekte gleichzeitig verwenden.

Siehe hier (zweiter Beitrag): Heap Space erweitern
 
Casiopaya hat gesagt.:
das verwundert mich, da ich ohne TreeSet locker 500.000.000 Objekte gleichzeit im Speicher haben kann.

Das bezweifel ich. Die Standard Heapsize ist maximal 64 MB groß. Das sind 67108864 Byte. Bei der Anzahl an Objekten, dürfte jedes Objekt maximal 1,07 Bit groß sein. :roll:
 
byto hat gesagt.:
Das bezweifel ich. Die Standard Heapsize ist maximal 64 MB groß. Das sind 67108864 Byte. Bei der Anzahl an Objekten, dürfte jedes Objekt maximal 1,07 Bit groß sein. :roll:

hi
hoppla, da ist mir nat. was verrutscht. :lol: sind 5.000.000. meinen VM-Speicher hab ich schon auf 512 MB erhöht.

dann mache ich offensichtlich einen fehler beim zählen der objekte mit und ohne set, da die maximal-zahl theorethisch gleich groß sein müsste? (ich glaub ich hab in der eile nicht beachtet welche objekte in der rek. funktion automatisch wieder freigegeben werden...).

möchte es nur genau wissen: der speicherverbrauch ist etwa gleich? dann komm ich wohl um eine db wie hsql nicht drumherum... oder halt irgendwas, das mir das zeugs auf platte auslagert. toll wärs, wenns in der java-klassenbibl. schon so etwas wie ein "TreeSetWithHDAuslagerung" gäbe... lol

danke+grüße
vasi
 
Casiopaya hat gesagt.:
dann mache ich offensichtlich einen fehler beim zählen der objekte mit und ohne set, da die maximal-zahl theorethisch gleich groß sein müsste? (ich glaub ich hab in der eile nicht beachtet welche objekte in der rek. funktion automatisch wieder freigegeben werden...).

Ich schätze auch, dass da Objekte wohl vom GC wieder freigegeben wurden. Wenn Du die Objekte im TreeSet hälst, dann bleiben sie ja definitiv alle im Speicher.
 
byto hat gesagt.:
Bei der Anzahl an Objekten, dürfte jedes Objekt maximal 1,07 Bit groß sein.

seit wann gibts sowas wie x.07 Bit ? Zum Thema: heap size vergrößern und gut is
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben