Performanceproblem ?

Status
Nicht offen für weitere Antworten.

Marmorkuchen

Mitglied
Hallo !
Ich habe da ein Problem bei meinem Adventureprojekt. Nach einiger Zeit im Spiel wir alles sehr träge und beginnt zu stocken was dazu führt, dass ich den Prozess gezwungen per Taskmanager abbrechen muss.
Ich würde ja gerne mehr über die Speicherverwaltung u.s.w rausfinden aber viel Spielraum wird einem ja
wegen dem GarbageCollector nicht geboten. Wo kann ich ansetzen um herrauszufinden wieso mein Spiel soviel Speicher nach einiger Zeit frisst ? (in 5 Minuten steigts von 10mb auf 90mb)

Hier noch ein Screenshot, damit ihr euch ein Bild machen könnt wie Grafikintensiv die geschichte ist.
Eigentlich keine komplizierten Renderings. Die Grafiken pro Szene umfassen insgesamt 500-1000kb und sind im png Format.

http://www.freakonline.de/files/MammoAdventures_Fudsndm_Screenshot230406.jpg

grüße,
Mammo
 
B

Beni

Gast
Das hört sich ja fast so an, als würden da irgendwo 1000 von Objekten erzeugt, welche vom GC nicht weggeräumt werden können?
Leg dir mal einen Profiler (z.B. JProfiler) zu, und lass dein Spiel damit ein paar Minütchen laufen. Der Profiler wird dir dann zeigen, wo dein Code wielange war, und welche Objekte erzeugt wurden.
 

Marmorkuchen

Mitglied
Sooo. Danke für eure Hilfe erstmal. Habe alles fleißig installiert und auch schon mit JProfiler das Programm
laufen lassen. Ich hoffe ich habe die Daten richtig verstanden:

Unter "Memory Views", bei aktiviertem "Live and Garbage Collected Objects" Liveness Mode komme ich mit
der int[] Classes auf erschreckende 109 mb ! danach folgend bytes[] (8 Mb) und chars[] (5 Mb).

Unter "CPU Views" werden 81,8% - 368 s - von inv. java.util.TimerThread.run genutzt. Danach folgt:

10,4% - 46.900 ms - 1 inv. java.awt.EventDispatchThread.run
7,0% - 31.712 ms - 23 inv. direct calls to methods of filtered classes
0,7% - 3.129 ms - 1 inv. adventure.AdventureMain.main

Nach den Statistischen Graphen steigt der Speicherverbrauch um 20 MB nach jeder geladenen Szene !

Folgendes ist auch noch interessant (habe ich unter Heap Walker > Allocations gefunden):

70,2% - 45.666 kB - 1.283 alloc. sun.awt.image.ImageFetcher.run

Die Konsole wirft auch noch 4 weitere Hinweise raus:


Exception in thread "Image Fetcher 1" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space
Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space

Ich besitze eine Dump Klasse, welche die Variablen der aktuellen Szene speichert. Diese Werte werden
einfach nach jedem laden der neuen Szene ersetzt. Wieso wird es dann mehr ?!

Wird es euch weiterhelfen wenn ich den Snapshot hochlade ?

grüße,
Marmorkuchen
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben