In mijn Java toepassing maak ik gebruik van een BufferedImage, waarin ik iets teken en vervolgens deze buffer 'swap' naar mijn echte tekenpaneel toe. Werkt prima allemaal, alleen gegenereerde plaatje is behoorlijk groot, 4500x4500 pixels (x 3bytes= gauw 60 MB ongeveer aan geheugen wat nodig is.
Ik geef nu een parameter op in de prompt om aan te geven dat er 70 MB geheugen moet worden gereserveerd, dit werkt prima. Wat er gebeurt tijdens het laden:
[functie bestand inladen]
- width en height worden bepaald adhv gegevensbestand.
- BufferedImage buffer = new Image(width, height, type);
1e keer inladen gaat prima, maar als ik meer dan 1 keer hetzelfde bestand wil inladen dan krijg ik een OutOfMemoryError. Enige wat helpt om meer dan 1x bestand te kunnen inladen is om als parameter aan java mee te geven dat er 170 (!) MB geheugen moet worden gereserveerd, anders krijg ik een OutOfMemoryError. Beetje teveel van het goede lijkt me, ik heb dus het idee dat hij 2x de imagebuffer gaat reserveren oid, ik dacht het te kunnen oplossen door de 'buffer' op null te zetten, maar dat is geen oplossing. Ook de GC aanroepen met System.gc() is niet een oplossing of een dumme buffer creeeren door: buffer = new Imagebuffer(1,1,type) te doen -- zodat ie kleiner zou worden eerst -- werkt niet.
--
Vreemde is dat ik het in JProfiler heb getest en daar wordt in totaal niet meer dan 170 MB geheugen gebruikt (ook na meerdere keren inladen). Ik moet dan dus ook aan java als parameter opgeven dat ie 170 MB geheugen moet reserveren. Ik wordt er niet blij van, want kans is groot dat er plaatjes moeten worden gegenereerd van zelfs 10K bij 10K pixels.
Is er misschien sowieso een betere aan te raden methode, of kan iemand me helpen met dit probleem?
Ik geef nu een parameter op in de prompt om aan te geven dat er 70 MB geheugen moet worden gereserveerd, dit werkt prima. Wat er gebeurt tijdens het laden:
[functie bestand inladen]
- width en height worden bepaald adhv gegevensbestand.
- BufferedImage buffer = new Image(width, height, type);
1e keer inladen gaat prima, maar als ik meer dan 1 keer hetzelfde bestand wil inladen dan krijg ik een OutOfMemoryError. Enige wat helpt om meer dan 1x bestand te kunnen inladen is om als parameter aan java mee te geven dat er 170 (!) MB geheugen moet worden gereserveerd, anders krijg ik een OutOfMemoryError. Beetje teveel van het goede lijkt me, ik heb dus het idee dat hij 2x de imagebuffer gaat reserveren oid, ik dacht het te kunnen oplossen door de 'buffer' op null te zetten, maar dat is geen oplossing. Ook de GC aanroepen met System.gc() is niet een oplossing of een dumme buffer creeeren door: buffer = new Imagebuffer(1,1,type) te doen -- zodat ie kleiner zou worden eerst -- werkt niet.
--
Vreemde is dat ik het in JProfiler heb getest en daar wordt in totaal niet meer dan 170 MB geheugen gebruikt (ook na meerdere keren inladen). Ik moet dan dus ook aan java als parameter opgeven dat ie 170 MB geheugen moet reserveren. Ik wordt er niet blij van, want kans is groot dat er plaatjes moeten worden gegenereerd van zelfs 10K bij 10K pixels.
Is er misschien sowieso een betere aan te raden methode, of kan iemand me helpen met dit probleem?
[ Voor 12% gewijzigd door Tjeerd op 25-06-2004 11:44 ]
www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.