Avatar billede over-load Nybegynder
11. december 2009 - 23:58 Der er 4 kommentarer og
1 løsning

LinkedList og try/catch

Godaften derude. Jeg er ikke helt sikker paa hvorfor foelgende stykke kode ikke fanger min java.lang.OutOfMemoryError - specielt naar den bliver fanget hvis jeg bruger en ArrayList.
Nogen der kan forklare hvad jeg ikke forstaar ?


import java.util.*;
public class Main
{

    public static void main(String[] args)
    {
        List<Integer> liste = new LinkedList<Integer>();
   
        while(true)
        {
            try
            {
                liste.add(null);
            }
            catch(Throwable e)
            {
                System.out.println(e.getMessage());
                System.out.println(liste.size());
                return;
            }
        }
    }
}
Avatar billede erikjacobsen Ekspert
12. december 2009 - 00:06 #1
Måske fordi der ikke er mere plads tilbage, og derfor ikke plads til at udføre koden i din catch.

En OutOfMemory er problematisk at håndtere, netop fordi der jo ikke er plads ... siger sig selv ... ikke?

Med en arraylist vil du typisk allokere store klumper, og når der så ikke er mere plads til en stor klump, er der måske en næsten stor klump RAM tilbage - nok til at håndtere dine udskrifter.

En linkedlist allokerer hele tiden små klumper (et element i listen), og når der så ikke er plads til en lille klump, er der måske heller ikke plads til dine udskrifter.

Ok, det er lidt gætteri ...
Avatar billede arne_v Ekspert
12. december 2009 - 00:11 #2
OOM fejl er kendte for at vaere meget svaere at haandtere. JVM'en er i store problemer naar det sker. Saa jeg er ikke overrasket over at der er uforudsigelige resultater.
Avatar billede over-load Nybegynder
12. december 2009 - 00:21 #4
Saa blev man jo saa klog !

Tak skal i begge have. Ser ikke ud til erik vil have point, saa smidder du et svar arne ;)?
Avatar billede arne_v Ekspert
12. december 2009 - 02:37 #5
svar
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