Java ArrayList voll?
Kann eine Java ArrayList voll werden? Also das keine Sachen mehr reinpassen. Also gibts da ne Begrenzung? Wenn ja gibts da ne Lösung?
3 Antworten
Bei der ArrayList dubliziert sich jedes mal die Größe. Zum beispiel wenn du 4 Symbole reinschreibst ist die Größe doppel so groß- das bedeutet 8 Symbole. Die Antwort ist ja, beim Java ArrayList gibt es Begrenzung(wegen RAM) und wenn möglich es ist besser nur Array zu benutzen.
Ja, wenn der RAM voll ist oder die Länge 2^31 erreicht, da dort 32-bit-Integer als Indizes verwendet werden.
Lösung: mehr RAM oder selbst die ArrayList schreiben. Vielleicht einfach eine ArrayList aus ArrayLists.
das ist eine der Bedeutungen von dem Wort "oder".
Ich meinte erste Lösung fürs erste Problem, 2. fürs 2..
Die Problematik ist, dass ArrayLists in Java durch Arrays implementiert werden, die bekanntlich mit Integern arbeiten.
Wenn man jetzt also unendlich Arbeitsspeicher zur Verfügung hätte, wäre eine einfache ArrayList dennoch bei 2^31 Einträgen am Ende.
Der Part mit dem "ArrayList aus ArrayLists" bezieht sich nicht darauf, dass der Arbeitsspeicher voll ist, sondern auf die Begrenzung durch 2^31 Einträge.
Ich empfinde das immer als eine extreme Einschränkung. Du kannst damit nur knapp 2GB an "byte" Variablen halten, wobei intern nochmal unglaublich viel mehr RAM verprasst wird.
Das kommt nicht häufig vor, aber manchmal ist es echt enorm praktisch, ein 32GB großes Array zu haben. Mit Java geht so etwas leider nicht, es sei denn, man nimmt enormen Overhead in Kauf. :)
An das Limit bin ich zum Glück bisweilen nicht rangekommen, aber ich kanns mir vorstellen xD
Wenn ich zu solchen Problemen kommen sollte, würde ich allerdings vmtl. auch von nem Array abweichen und ne andere Datenstruktur verwenden. Wobei der Overhead dabei glaube ich immernoch übel wäre >_>
Du könntest der VM beim Start mehr RAM zuweisen. Das ändert natürlich nichts an der Limitierung der Arraygröße an sich. :)
Siehe dazu:
das bringt nicht...wenn du zu viele Elemente hast ist einfach der Arbeitsspeicher voll und das Programm versagt den Dienst......da kannst du noch so viele arraylisten haben wie du willst