Avatar billede kaydk Nybegynder
01. november 2005 - 19:03 Der er 19 kommentarer og
1 løsning

java.lang.OutOfMemoryError: Java heap space HJÆLP

Hej, jeg er igang med at skrive et java program som finder den koreste rejsetid med tog mellem to byer.

Som input tager programmet en køreplan på bestemt form, en startstation og en slutstation.

Som en led løsningen har jeg brugt bl.a.;

Dijkstras-shortest-path algoritme
Oprettelse af prioritetskø vha. binær hob
Brugt ArrayList til sortering
Anvendt Hashmap

Jeg er sådan set færdig med programmet, og jeg får også det rigtige output, min problem er, når jeg indlæser en STOR køreplan (med omkring 5000 linjer), så kan jeg mærke min computer arbejder på højtryk, og efter omkring 30 sekunder eller 1 minut får jeg fejlmeddelsen;

java.lang.OutOfMemoryError: Java heap space

Hvad skyldes det, og hvordan kommer jeg over denne? Det skal siges, at mit program kører ellers perfekt, intet problem med outofbounds i arrays eller så noget.

Men den har åbenbart problemer med at håndterer store filer?
Avatar billede arne_v Ekspert
01. november 2005 - 19:09 #1
sætter du max memory ?
Avatar billede arne_v Ekspert
01. november 2005 - 19:09 #2
altså f.eks.:

java -Xmx256m ...
Avatar billede kaydk Nybegynder
01. november 2005 - 19:12 #3
Jeg søgte på det problem herinde, der var også en skrev anbefalede

java -Xmx256m ...

men jeg har prøvet uden held, den store test fil er en min lærer har lavet.
Det kan da ikke passe, hun skal lave en fil der ikke kan køre på en almindelig computer?

Men det problem der, det har ikke noget at gøre med, at der er fejl på ens program vel? Det er vel noget med ram og håndtering af data.
Avatar billede arne_v Ekspert
01. november 2005 - 19:15 #4
java.lang.OutOfMemoryError betyder at den ikke kan allokere mere memory d.v.s.
at en new fejler

og default max memory er pinligt lille

hvor meget RAM har du i din PC ? -Xmx512m ? -Xmx1024m ?
Avatar billede kaydk Nybegynder
01. november 2005 - 19:18 #5
"d.v.s. at en new fejler" hvad mener du?

Jeg har 512 mb på min bærbar.
Avatar billede arne_v Ekspert
01. november 2005 - 19:20 #6
Du laver en:

X o = new X();

hvis en instans af X fylder 2000 bytes så allokerer du 2000 bytes fra heap

hvis der ikke er plads i heap så får du en java.lang.OutOfMemoryError
Avatar billede arne_v Ekspert
01. november 2005 - 19:21 #7
med 512 MB kan du nok ikke gå højere end -Xmx384m
Avatar billede arne_v Ekspert
01. november 2005 - 19:21 #8
er du sikker på at der ikke er en applikations fejl som gør at den allokerer
mere end nødvendigt ?
Avatar billede kaydk Nybegynder
01. november 2005 - 19:27 #9
undskyld jeg forstår ikke helt din formulering, kan du utrykke det på en anden måde.
"hvis en instans af X fylder 2000 bytes så allokerer du 2000 bytes fra heap"

Når du snakker om heap, mener du så den jeg har konstrueret til løsning af opgaven eller en helt anden heap i computeren?

Hvis du taler om min heap jeg har konstrueret, så har jeg lavet sådan en funktion i den:

        if (size == heap.length)
        {
            Comparable[] newHeap = new Comparable[2*heap.length];
            System.arraycopy(heap, 0, newHeap, 0, heap.length);
            heap = newHeap;
        }

Som fordobler hob'ens størrelse, hver gang elementerne fylder ud.
Avatar billede arne_v Ekspert
01. november 2005 - 19:35 #10
når jeg snakker heap mener jeg JVM'ens interne heap

din applikation har så en heap der er allokeret fra JVM'ens heap
Avatar billede arne_v Ekspert
01. november 2005 - 19:37 #11
når du starter JVM'en med:

java -Xms64m -Xmx256m ...

så allokerer Java 64 MB fra styre systemet til heap

hver gang dit program laver en new så allokerer den noget fra JVM'ens heap

når de 64 MB er brugt allokerer den mere fra styre systemet

indtil de 256 MB er brugt så bang du er død
Avatar billede kaydk Nybegynder
01. november 2005 - 19:51 #12
Dvs. jeg har lavet en dumkode, som går ind og gør dette? Jeg synes ellers min kode er skrevet ret effektivt :( og overholder de køretider min lærer har sat. Mine venner får ikke disse problemer. Hvad kan jeg gøre?
Avatar billede arne_v Ekspert
01. november 2005 - 19:59 #13
det ved jeg ikke

kan dine kammerater løse den store fil med mindre end -Xmx256m ?

så må der jo være et eller andet de gør bedre end dig
Avatar billede kaydk Nybegynder
01. november 2005 - 20:03 #14
Det må du have ret i, men skyldes problemet, at jeg opretter for mange nye objekter end mit ram-lager kan håndtere, derfor jeg får fejlmeddelsen?

Eller kan det også skyldes, at mit program bruger for mange funktioner som if, while, for?
Avatar billede arne_v Ekspert
01. november 2005 - 20:08 #15
ja (men spørgsmålet er hvorfor dit program er anderledes end dine venners)

nej
Avatar billede kaydk Nybegynder
01. november 2005 - 20:19 #16
Jeg vil i gang med at debugge:).
Avatar billede kaydk Nybegynder
09. november 2005 - 21:29 #17
.
Avatar billede kaydk Nybegynder
09. november 2005 - 21:30 #18
Hvordan kan jeg give dig point arne..
Avatar billede arne_v Ekspert
09. november 2005 - 21:31 #19
du tog dem selv
Avatar billede arne_v Ekspert
09. november 2005 - 21:32 #20
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