Avatar billede kenneth_breve Nybegynder
09. september 2008 - 14:13 Der er 11 kommentarer og
1 løsning

Maksimum størrelse for Arraylist

Jeg har lavet en applet hvor man bla. læser indholdet af en komma separeret fil på ca. 15 MB.

Alle disse strenge og tal som er i listen indsættes i en Arrayliste som kommer op over 1million elementer.

Men omkring 1million elementer generes en "Java heap space" fejl for ArrayListen. 

Er der et alternativ til ArrayList som kan indeholde flere elementer uden at bruge ligeså meget plads?
Avatar billede erikjacobsen Ekspert
09. september 2008 - 14:48 #1
Du skal måske blot starte din java-fortolker op med mere RAM.
Avatar billede kenneth_breve Nybegynder
09. september 2008 - 14:54 #2
Hvordan sørger man for at java fortolkeren starter op med mere ram på alle klienters computere?

Altså så dem som besøger hjemmesiden og åbner appleten ikke skal ændre i deres java fortolker?
Avatar billede erikjacobsen Ekspert
09. september 2008 - 15:24 #3
Det ved jeg så ikke ... Klienten kan selv i kontrolpanelet sætte en større grænse, men jeg ved ikke om man i html-koden, hvor du angiver din applet, kan skrive noget, så din bruger ikke skal gøre noget.
Avatar billede kenneth_breve Nybegynder
09. september 2008 - 15:33 #4
Men hvor meget plads allokeres for hvert element i arraylisten?

Jeg undrer mig over at jeg har prøvet at udskifte alle steder hvor der står "Tiden" til "T" i min fil, hvilket der gør 500.000 gange, dette ændrer ikke på hvor langt den når i indlæsningen af filen. Selvom man skulle tro at et streng element "T" fylder mindre end et streng element "Tiden"

??
Avatar billede erikjacobsen Ekspert
09. september 2008 - 15:46 #5
Det kan jeg så heller ikke sige noget om (og gør det alligevel ...) - men hvordan Java allokerer sine elementer er jo op til den. Det kan sikkert betale sig ikke at allokere for små objekter, hvis man skal kunne lave garbagecollection.

Men kunne det ikke være en idé at omtænke løsningen? Fx så man kun henter de data, som appletten reelt bruger (ja, jeg kender ikke din problemstilling).
Avatar billede kenneth_breve Nybegynder
09. september 2008 - 15:52 #6
Men er Applet'er ikke bygget til at håndtere så store mængder data, ville det være bedre at lave det som en Java Web Start ?
Avatar billede erikjacobsen Ekspert
09. september 2008 - 15:54 #7
Helt generelt kan du ikke - bør i hvert fald ikke kunne - overtage en brugers maskine via webbrowseren. Dvs. ikke kunne allokere vilkårligt meget RAM til fx en applet.

Web Start er vel en mulighed. Jeg ville kigge på om man har brug for al data hele tiden. Der må da også være en vis opstartstid.
Avatar billede arne_v Ekspert
09. september 2008 - 17:25 #8
ArrayList er backed by et array

arrays i Java har en limit paa 2.1 milliarder elementer

ArrayList har samme limit

for en normal Java app kan max heap size angives med -Xmx i command line

for en Java Applet kan du ikke goere noget

for en Java Web Start app kan max heap size angives i JNLP filen

Jeg gaetter paa at Java Applet -> Java Web Start app er den mest farbare vej for dig !
Avatar billede kenneth_breve Nybegynder
09. september 2008 - 17:34 #9
Mange tak for svarene begge to.

Smid svar.
Avatar billede arne_v Ekspert
09. september 2008 - 18:10 #10
svar
Avatar billede erikjacobsen Ekspert
09. september 2008 - 18:39 #11
Ingen point til mig, tak.
Avatar billede schwarz84 Nybegynder
10. september 2008 - 07:52 #12
Hvis du signer din applet så har du mulighed for at gemme filer. Du kunne så gemme dine data i en fil i stedet for i en ArrayList...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester