Archief - [PROG][JAVA] java.lang.OutOfMemoryError

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

blub

Legacy Member
Hallo,

Wij moeten momenteel voor ons JavaProject een spel schrijven waarbij je tegen een monster meot vechten enzo..
Maar na ons gevecht, ga je als gewonne hebt, naar het 'gewonnenFrame' en als je verliest naar het 'verlorenFrame' nadat je op de exit button van ons gevecht geduwt hebt.

Maar telkens we de held laten verliezen en op exit duwen om naar 'verlorenFrame' te gaan, krijgen we een java.lang.OutOfMemoryError, maar als ik dan nog 2 of 3 keer op die knop druk, gaat het plots wel en wordt die frame wel getoond..
Nochthans geeft ons 'gewonnenFrame' geen java.lang.OutOfMemoryError terwijl deze dezelfde layout als 'verlorenFrame' gwn een andere tekening erop..
Beide frames worden op dezelfde manier aangeroep, toch doed deze error zich alleen voor bij het aanroepen van 'verlorenFrame'..

Iemand enig idee wat we hieraan kunnen doen? Alle hulp is welkom sinds alles tegen dinsdag klaar moet zijn en we zouden graag dit weekend alles al op punt hebben!

Greetz

Timmos

Legacy Member
Is het een simpel programmake of is het echt een volwaardig spel? :) Het kan zijn dat uw Java heap space te klein is, indien uw programma echt zoveel geheugen nodig heeft.

Anders hebt ge misschien een lus waarin telkens nieuwe objecten worden aangemaakt en in een lus gestoken, alhoewel dat heel onwaarschijnlijk lijkt, omdat ge dan wel héél veel objecten nodig hebt om buiten uw heap space te geraken.

Timmos

Legacy Member
blub zei:
Wat versta je onder een volwaardig spel?
Een spel waar er al "deftige" graphics in zitten. Enfin ja, dan nog, om dan een memory error te krijgen... In welk programma ontwikkelt ge dit spel?

In netbeans kunt ge uw heap space vergroten, de command line syntax weet ik niet.

Kijk eens bij het uitvoeren van je programma hoeveel geheugen het inneemt in taakbeheer.

blub

Legacy Member
Ontwikkelen in Together Architect for Eclipse 2006
en ja het spel zit vol graphics... aka images

Timmos

Legacy Member
Open de opties in Eclipse. Ergens moet je "VM options" of iets in die aard zien te vinden. Daarbij moet je invullen: "-Xms256m". Dit vergroot de Java heap space naar 256 MB.

En hoeveel verbruikt je programma nu?

blub

Legacy Member
hoe zie je dat?

*edit* die optie is nergens te bekennen in Together..
*edit2* Ik heb onze 2 grootste .wav files van 25kb naar 10kb gebracht en nu werkt het.. wrs had hij nadien te weinig geheugen om de volgende te laden..

Maar als je this.dispose(); doet, moet hij dan die .wav files niet uit z'n geheugen smijten?

Timmos

Legacy Member
Dat van dispose() dat weet ik niet zeker, maar het is het proberen waard.

Ik heb nu al twee keer gevraagd om te kijken hoeveel RAM je programma inneemt. Kijk nu eens in taakbeheer hoeveel dat is, en ook op het moment waar het (vroeger) een OutOfMemoryError gaf :p

blub

Legacy Member
ah, via taakbeheer :p
ik maar zoeken in Together waar da stond :p

secondje ;)

*edit* als ik het run krijg ik 2 processen, 1 van 144.140kb en nog 1 van rond de 50.152kb (die piekt bij 68.128kb)

Timmos

Legacy Member
blub zei:
ah, via taakbeheer :p
ik maar zoeken in Together waar da stond :p

secondje ;)

*edit* als ik het run krijg ik 2 processen, 1 van 144.140kb en nog 1 van rond de 50.152kb (die piekt bij 68.128kb)
Ah excuseer, ik wist niet dat die 'waar vind je dat?' sloeg op het feit dat ge nie wist waar te kijken hoeveel het innam. Ik dacht dat ge vroeg naar waar ge die -Xms256m kon invoeren :)

Nu kijk, de Java heap space staat standaard op 64 MB bij 32 bits systemen. Dus het zou wel eens goed kunnen dat uw programma er over gaat, met de piekwaarde die ge daar vermeldt. Het zou ook kunnen dat uw IDE er zich mee moeit. Daarom moet ge uw heap space vergroten, met hetgeen ik eerder heb gezegd.

Dat proces van 100 000+ kb is wellicht java.exe maar daar moet ge u niets van aantrekken.

blub

Legacy Member
ze waren allebei javaw.exe..

en die VM options vidn ik voorlopig niet in mijn Together Architect, kzal straks nog is verder zoeken

blub

Legacy Member
proces%20java.JPG


is dit normaal qua verbruik als je een java programma runt?

Timmos

Legacy Member
Dat van 250 000 kb is uw gewone java die is ingeladen. Bij mij is dat 120 000 mb, maar ik heb blijkbaar een andere java versie (bij mij is dat gewoon java.exe).

Er zijn wel nogal veel processen van javaw.exe actief. Weet je zeker dat als je je spel sluit, het venster niet gewoon geminimaliseerd wordt? Zo ja, wat stellen die processen dan voor?

Die 50 mb lijkt mij niet zo abnormaal trouwens. Post eens een screen van je spel als je wilt :)

blub

Legacy Member
Dit is het mainscreen van het spel:
HeroQ.JPG

deze roept nadien een frame aan enz... (Het spel is wel gemaakt voor 1024*768)

O ja, bestaat er een methode om 2 geluiden achter elkaar te laten spelen, zodat het 2e pas begint als het eerste gestopt is?

Timmos

Legacy Member
Ja man, als ik dat beginscherm zie, dan lijkt mij da volkomen normaal dat ge soms niet toekomt met het default Java-geheugen :x

Van die geluiden weet ik niets af.

blub

Legacy Member
Hehe, maar ik vind echt die optie voor de VM geheugen echt niet in mijn Together, zal straks maar eens die help afschuimen.

Je weet toevallig niet hoe je een bepaalde knop laat werken door op het toetsenbord te duwen?

killgore

Legacy Member
kzal eens kijken waar die VM zit als ek trug op men kot ben, daar heb ek op een externe eclipse me together opstaan ;).

Ziet er mooi uit trouwens :).

Timmos

Legacy Member
blub zei:
Je weet toevallig niet hoe je een bepaalde knop laat werken door op het toetsenbord te duwen?
Je laat een klasse de interface KeyListener implementeren. Dan heb je 3 methodes die je kan implementeren, de headers ervan spreken voor zich.

De parameter is dan is een KeyEvent ke, dan vraag je met ke.getKeyCode() een int op. Is dat bij wijze van voorbeeld hetzelfde als KeyEvent.VK_UP dan is de pijl naar boven ingedrukt.

Hetzelfde voor KeyEvent.VK_DOWN, KeyEvent.VK_RIGHT enzovoort. Ge moet eens kijken :)

Code:
public void keyPressed(KeyEvent e){
    if (e.getKeyCode() == KeyEvent.VK_UP){
        // pijl naar boven ingedrukt
    }
}

MemberX

Legacy Member
In eclipse heb je onder run tab de arguments en daar heb je de vm arguments.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan