Java ArrayList voll?

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.


pondycherry1999  27.02.2018, 18:54

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

0
Gastnr007  27.02.2018, 19:34
@pondycherry1999

das ist eine der Bedeutungen von dem Wort "oder".

Ich meinte erste Lösung fürs erste Problem, 2. fürs 2..

1
Etter  27.02.2018, 20:50
@pondycherry1999

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.

2
TeeTier  27.02.2018, 21:08
@Etter

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. :)

0
Etter  27.02.2018, 21:14
@TeeTier

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 >_>

1

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:

https://www.nayuki.io/page/large-arrays-proposal-for-java