Avatar billede dr_chaos Nybegynder
19. juni 2004 - 13:22 Der er 35 kommentarer og
2 løsninger

hvad jeg gøre ved java.lang.OutOfMemoryError

jeg får en java.lang.OutOfMemoryError når jeg compiler mit program.
Hvad kan jeg gøre for at øge mængden at tilgængelig memory?
Avatar billede simonvalter Praktikant
19. juni 2004 - 13:27 #1
Har du overvejet om det er koden den er galt med og ikke den tilgængelige hukommelse.
Avatar billede simonvalter Praktikant
19. juni 2004 - 13:30 #2
ellers er det vist
java -Xms<size>
set initial Java heap size. default:Xms32m
java -Xmx<size>
set maximum Java heap size. default:Xmx128m
du skal have fat i.
Avatar billede simonvalter Praktikant
19. juni 2004 - 13:31 #3
Hov det er vist ikke koden når det sker mens du compiler.
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 13:33 #4
hvordan skal jeg indsætte java -Xmx<size>  ?
Avatar billede simonvalter Praktikant
19. juni 2004 - 13:34 #5
Lad mig lige være helt sikker er det når du compiler eller når du kører programmet?
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 13:37 #6
det er når jeg kører programmet.
kan en meget lang sql sætning godt dræbe programmet ?
Avatar billede simonvalter Praktikant
19. juni 2004 - 13:39 #7
Ok hvis du kører programmet er det nok koden. Jeg tror ikke en lang sætning vil crashe java men hvis du henter rigtigt meget ind i et resultset kan det måske ske.. jeg er ikke lige ekspert i det ;)
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 13:41 #8
ok jeg kigger på det
andre som har nogen bud ?
Avatar billede simonvalter Praktikant
19. juni 2004 - 13:41 #9
Jeg har mest set den fejl i uendelige løkker.
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 13:46 #10
fejlen kommer selv om der ikke er nogen løkker i nærheden af den :(
Avatar billede soreno Praktikant
19. juni 2004 - 13:46 #11
Lad os se koden..
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 13:55 #12
2 sek prøver lige med et reboot
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 14:15 #13
koden kan hentes på www.jee.dk/ooad.rar
Avatar billede soreno Praktikant
19. juni 2004 - 14:17 #14
Så er du nødt til også at paste *hele* exception teksten - ellers er det svært at gætte sig til fejlen.. :-)
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 14:20 #15
java.lang.OutOfMemoryError

Exception in thread "main"
Avatar billede soreno Praktikant
19. juni 2004 - 14:20 #16
Ikke nogen linie angivelser ?
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 14:20 #17
nope
Avatar billede soreno Praktikant
19. juni 2004 - 14:22 #18
Så bliver du nødt til at identificere den metode der er skyld i problemet.
Det kan f.eks. gøres med en række System.out.println på strategiske steder.
Eller ved brug af debugger.
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 14:26 #19
jeg har prøvet at ud kommentere næsten alt uden det hjalp.
Avatar billede soreno Praktikant
19. juni 2004 - 14:29 #20
Det er svært at hjælpe når der ikke er konkret kode på bordet.

Hvad gør du når det går galt (jeg kan se du har en menu, du må vælge et punkt) ?
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 14:36 #21
ja
Jeg har ingen anelse om hvad problemet er.
jeg kan opdatere rar filen så den kun indeholder de filer jeg bruger og ikke alt det andet skidt jbuilder smider.
Jeg har prøvet med Jcreator og slettet alle filer undtagen 3 og der giver den stadigvæk samme fejl.
skal jeg smide koden op til de 3 ?
Avatar billede simonvalter Praktikant
19. juni 2004 - 14:38 #22
tror bare du skal forklare hvad det er du gør når fejlen opstår.
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 14:40 #23
jeg går bare ind under et hvilket som helst menu punkt.
lige meget hvad jeg gør så er fejlen der.
den kan vise hovedmenuen.
hvad jeg gør der fra er underordnet.
Avatar billede soreno Praktikant
19. juni 2004 - 14:45 #24
Følgende lille test giver fejlen:

package db;

public class Test
{
    public static void main(String args[])
    {
        System.out.println("1");
        Customer customer = new Customer();
        System.out.println("2");
    }
}


Så mon ikke vi skulle kigge lidt nærmere på konstruktøren til Customer.. :-)
Avatar billede soreno Praktikant
19. juni 2004 - 14:50 #25
I Customer er følgende datamember angivet:
Customer dbCustomer = new Customer();

Hvad er formålet med det ?

Når en Customer klasse instantieres vil den linie skabe en ny instans, som vil skabe en ny instans i al tid og evighed (eller til der ikke er mere heap space).
Avatar billede soreno Praktikant
19. juni 2004 - 14:50 #26
Med andre ord, så har du en evig løkke (som vi jo alle ved er ulykke..) :-)
Avatar billede simonvalter Praktikant
19. juni 2004 - 14:53 #27
tror du skal have kigget på "this" =)
Avatar billede simonvalter Praktikant
19. juni 2004 - 14:56 #28
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 15:05 #29
hmm jeg er lidt lost i det i skriver lige nu.
(er ikke helt på toppen).
lidt mere forklaring ?
Avatar billede simonvalter Praktikant
19. juni 2004 - 15:08 #30
jeg kan se du har lavet Customer dbCustomer = new Customer(); for at få en reference til en customer så du kan kalde metoderne på den open() .. osv.
Det er forkert.. som soreno siger så sker det at når du laver en
Customer dbCustomer = new Customer();
vil den lave en ny Customer dbCustomer = new Customer(); osv...
en uendelig løkke.

hvis du vil kalde en metode på en klasse kan du få fat i det samme objekt ved at bruge nøgleordet
this

f.eks. this.open();
eller du kunne bare skrive open();
Avatar billede soreno Praktikant
19. juni 2004 - 15:11 #31
Du laver en instans af en klasse når du skriver:
Customer dbCustomer = new Customer();

#1 Din Customer klasse har en række datamembers (variabler) som der initialiseres plads til ved instantiering af klassen.

#2 Customer klasse initialiserer bl.a. denne variabel:
Customer dbCustomer = new Customer();

#3 ..som jo naturligvis instantierer en ny Customer klasse. Det næste der sker kan du læse om i #1.

(så du har en evig løkke).

Hvordan du kommer omkring problemet kan du nok bedst selv afgøre (jeg har jo næsten intet kendskab til din kode og formålet med koden).
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 15:11 #32
så man skal ikke bruge
Menu mainMenu = new Menu();
f.eks ?
Avatar billede simonvalter Praktikant
19. juni 2004 - 15:19 #33
Jo du skal jo bruge en reference til main menuen.
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 15:21 #34
hurra har fattet det nu.
smid et svar begge to så får noget mere end 30 points.
tak for hjælpen :)
Avatar billede soreno Praktikant
19. juni 2004 - 15:23 #35
Ok.
Avatar billede simonvalter Praktikant
19. juni 2004 - 15:24 #36
ok
Avatar billede dr_chaos Nybegynder
19. juni 2004 - 15:33 #37
sådan :)
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