23. marts 2004 - 13:25Der er
12 kommentarer og 1 løsning
LinkedList sluger hukommelse
jeg har oprettet en linked list:
private LinkedList grafContent;
grafContent = new LinkedList();
nå der sker en event bliver værdien af eventen lagt ned i min LinkedList: grafContent.add(new Double(value));
Mit problem er nu at jeg tilføjer ret mange elementer til listen, men selv om jeg sletter nogle af de første elementer når det er at listen er ved at blive lang bliver den hukommelse den har taget ikke frigivet igen. Hukommelsen bliver heller ikke frigivet hvis jeg kalder clear på listen.
Hvordan sørger jeg få at hukommelsen bliver frigivet igen når elementet ikke længere eksisterer i listen?
umiddelbart tror jeg ikke at pladsen er tilgængelig for nye java objekter. Er ikke så hård til hvad der egentlig sker. Jeg opdagede bare at systemet kørte meget langsomt efter jeg havde kørt dette kode, og jeg kunne så se i en systemmonitor at hukommelsen ikke blev frigivet før jeg lukkede programmet.
Synes godt om
Slettet bruger
23. marts 2004 - 13:38#5
Hov, ja.....arne_v har jo egentligt ret i det han siger...... hvis en LinkedList har allokeret X antal bytes hukommelse, så frigiver den vel ikke hukommelsen, det er kun antallet af elementer (i listen) som er mindre. Det er vel også derfor man kan initialisere Collection-klasser med x-antal pladser (så den ikkke allokerer mere hukommelse end det er strengt nødvendigt)
Implicit garbage collection eller eksplicit med System.gc vil fjerne objekter som der ikke er reference til længere og gøre pladsen tilgængelig for nye Java objekter.
Når Java mangler plads allokerer den mere plads fra styre systemet (Windows). Men den frigiver ikke plads når den ikke længere skal bruge det. D.v.s. uanset hvormeget du fjerner af objekter og garbage collecter, så bliver memoryen kun tilgængelig inde i samme JVM ikke for andre programmer (selvom jeg formoder at den kan pages ud).
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.