[Slick2D] Problem bei Speicherfreigabe

Lukas1995

Mitglied
Hallo 🙂

Ich bin grade dabei, fleißig an meinem Spiel zu arbeiten, nun bin ich durch Zufall auf Probleme mit der Freigabe von Objekten gestoßen.

Mein Level besteht aus Tile-Objekten, die eine Referenz auf die Klasse haben, die alle Objekte des eigentlichen Spiels verwaltet.

Dazu gibt es noch andere Objekte, die fast alle Referenzen auf die "Oberklasse" haben.

Wenn ich nun aus einer Datei ein sehr großes Level einlese, fällt das in der Veränderung des Arbeitsspeichers shcon auf, was ich nciht weiter schlimm finde. Wenn ich wieder zurück ins Hauptmenü wechsel, soll die "Spieloberklasse" freigegeben werden, mit dem Level zusammen. Scheinbar wird sie das aber nicht. Wenn ich dann wiederrum in die "Oberklasse" wechseln und ein neues Level lade, steigt der RAM noch weiter. Deshalb dachte ich, dass das vorige Level noch irgendwo weiterexistiert, obwohl ich das beim Verlassen der Oberklasse aus null gesetzt habe.

ram.png

Wie kann ich das beheben ? Oder ist das normal? Ich verzweifle dabei echt, bei anderen Programmiersprachen gibt es ja den Befehl .free() oder ähnliches, was es ja in Java nicht gibt.
 
Wenn das der Verlauf aus dem Windows Taksmanager ist, ist das erstmal nicht schlimm. Java bekommt eine bestimmte Menge Speicher zugesichert, und nimmt sich so viel, wie es davon braucht - aber auch wenn die Objekte auf 'null' gesetzt werden, wird der Speicher nicht sofort (für den Taskmanager sichtbar) wieder "freigegeben". Stattdessen wird er (das ist jetzt alles stark vereinfacht!) als "unbenutzt" markiert, und nur wirklich "gelöscht", wenn man ihn für etwas anderes braucht.

Solange kein OutOfMemoryError kommt, brauchst du dir keine Gedanken zu machen. Im Zweifelsfall mal mit der jVisualVM nachsehen, wo der Speicher so liegt...
 
Ah, okay, das war mir noch unbekannt, dass der ganze zugeschriebene Speicher benutzt wird. Dann brauch ich mir ja scheinbar keine Sorgen zu machen. 🙂

Ich werd demnächst mal die jVisualVM benutzen, danke für den Hinweis. 🙂
 

Zurück
Oben