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;
}
}
}
}
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 ...