manwhofindnoname Geschrieben 8. Februar 2005 Geschrieben 8. Februar 2005 Ich hab ein Programm geschrieben das mit vielen großen Bildern arbeitet. (5MB Bilder)Wenn ich das Programm öfters ausgeführt habe kommt dieses Problem. Ich glaub wenn ich vor dem Schießen den Speicher manuel leere geht dieser Fehler weg. Aber wie mach ich das???? Zitieren
kingofbrain Geschrieben 8. Februar 2005 Geschrieben 8. Februar 2005 Dazu kann man nur was sagen, wenn man Dein Programm kennt. Kannst Du das eindampfen und hier zeigen, so dass nur das drinsteht, was die Symptome zeigt? Setzt Du Referenzen von Objekten, die du nicht mehr brauchst, auch schön auf null? Was heisst mehrmals ausführen? Hast Du mal einen Profiler drüberlassen? (google nach Java Profiler) Hast Du - wenn Du mehr Speicher brauchst - die VM-Argumente für minimalen und maximalen Speicher probiert? Hab sie grad nicht im Kopf, javabuch sollte helfen. Peter Zitieren
manwhofindnoname Geschrieben 8. Februar 2005 Autor Geschrieben 8. Februar 2005 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.io.*; import java.net.*; class Bilder extends JPanel { private Image kampfhintergrund,granate,kampf,defensiv,flucht,auswahl,heiltrank,seabeach; private Image drache, dracheani, kampfb,kampfani,gewonnen, verloren; private Image heldrechtslaufen,heldrechtsstehen,hintergrund,hintergrund2,hintergrund3; private Image heldlinkslaufen,heldlinksstehen,heldobenstehen,heldobenlaufen; private Image helduntenlaufen,helduntenstehen,granate1,granate2,granate3,granate4,granate5,granate6,granate7,granate8,granate9,granate10,granate11,granate12,granate13,granate14,granate15; public Bilder() { // Bilder laden MediaTracker tracker = new MediaTracker(this); kampfhintergrund = Toolkit.getDefaultToolkit().getImage("Kampfhintergrund.jpg"); granate = Toolkit.getDefaultToolkit().getImage("Granate.gif"); heiltrank = Toolkit.getDefaultToolkit().getImage("Heiltrank.gif"); kampf = Toolkit.getDefaultToolkit().getImage("Heldkämpfen.gif"); defensiv = Toolkit.getDefaultToolkit().getImage("Defensiv.gif"); flucht = Toolkit.getDefaultToolkit().getImage("Flucht.gif"); auswahl = Toolkit.getDefaultToolkit().getImage("Auswahl.gif"); seabeach = Toolkit.getDefaultToolkit().getImage("SeaBeach.png"); drache = Toolkit.getDefaultToolkit().getImage("Drache.gif"); hintergrund = Toolkit.getDefaultToolkit().getImage("Hintergrundbilder/Strand1.jpg"); hintergrund2 = Toolkit.getDefaultToolkit().getImage("strand2.jpg"); hintergrund3 = Toolkit.getDefaultToolkit().getImage("Stadt.jpg"); dracheani = Toolkit.getDefaultToolkit().getImage("Dracheani.gif"); kampfani = Toolkit.getDefaultToolkit().getImage("Stichani.gif"); verloren = Toolkit.getDefaultToolkit().getImage("Verloren.jpg"); gewonnen = Toolkit.getDefaultToolkit().getImage("Gewonnen.jpg"); heldrechtslaufen = Toolkit.getDefaultToolkit().getImage("Heldrechtslaufen.gif"); heldrechtsstehen = Toolkit.getDefaultToolkit().getImage("Heldrechtsstehen.gif"); heldlinkslaufen = Toolkit.getDefaultToolkit().getImage("Heldlinkslaufen.gif"); heldlinksstehen = Toolkit.getDefaultToolkit().getImage("Heldlinksstehen.gif"); heldobenstehen = Toolkit.getDefaultToolkit().getImage("Heldobenstehen.gif"); heldobenlaufen = Toolkit.getDefaultToolkit().getImage("Heldobenlaufen.gif"); helduntenlaufen = Toolkit.getDefaultToolkit().getImage("Helduntenlaufen.gif"); helduntenstehen = Toolkit.getDefaultToolkit().getImage("Helduntenstehen.gif"); granate1 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate01.gif"); granate2 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate02.gif"); granate3 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate03.gif"); granate4 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate04.gif"); granate5 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate05.gif"); granate6 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate06.gif"); granate7 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate07.gif"); granate8 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate08.gif"); granate9 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate09.gif"); granate10 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate10.gif"); granate11 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate11.gif"); granate12 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate12.gif"); granate13 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate13.gif"); granate14 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate14.gif"); granate15 = Toolkit.getDefaultToolkit().getImage("/Granate/Granate15.gif"); int id = 1; int id1 = 1; int id2 = 1; int id3 = 1; int id4 = 1; int id5 = 1; int id6 = 1; int id7=1;int id8=1;int id9=1;int id11=1;int id12=1;int id13=1; int id14 = 1; int id15 = 1; int id16 = 1; int id17 = 1; int id18 = 1; int id19 = 1; int id20 = 1; int id21=1;int id22=1;int id23=1;int id24=1;int id25=1;int id26=1; // ID zum Verfolgen des Bildladevorgangs tracker.addImage(kampfhintergrund, id); tracker.addImage(heiltrank, id1); tracker.addImage(kampf, id2); tracker.addImage(defensiv, id3); tracker.addImage(flucht, id4); tracker.addImage(auswahl, id5); tracker.addImage(granate, id6); tracker.addImage(seabeach, id7); tracker.addImage(drache, id8); tracker.addImage(dracheani, id9); tracker.addImage(kampfani, id11); tracker.addImage(gewonnen, id12); tracker.addImage(verloren, id13); tracker.addImage(hintergrund, id14); tracker.addImage(hintergrund2, id15); tracker.addImage(hintergrund3, id16); tracker.addImage(heldrechtslaufen, id17); tracker.addImage(heldrechtsstehen, id18); tracker.addImage(heldlinkslaufen, id19); tracker.addImage(heldlinksstehen, id20); tracker.addImage(heldobenstehen, id21); tracker.addImage(heldobenlaufen, id22); tracker.addImage(helduntenlaufen, id23); tracker.addImage(helduntenstehen, id24); try { tracker.waitForID(id); tracker.waitForID(id1); tracker.waitForID(id2); tracker.waitForID(id3); tracker.waitForID(id4); tracker.waitForID(id5); tracker.waitForID(id6); tracker.waitForID(id7); tracker.waitForID(id8); tracker.waitForID(id9); tracker.waitForID(id11); tracker.waitForID(id12); tracker.waitForID(id13); tracker.waitForID(id14); tracker.waitForID(id15); tracker.waitForID(id16); tracker.waitForID(id17); tracker.waitForID(id18); tracker.waitForID(id19); tracker.waitForID(id20); tracker.waitForID(id21); tracker.waitForID(id22); tracker.waitForID(id23); tracker.waitForID(id24); } catch (InterruptedException e) { } } public Image[] getKampfbilder() { //die Bilder für den Kampfmodus Image kampfbilder[]=new Image[12]; kampfbilder[0]= kampfhintergrund; kampfbilder[1]= heiltrank ; kampfbilder[2]= kampf ; kampfbilder[3]= defensiv ; kampfbilder[4]= verloren ; kampfbilder[5]= auswahl ; kampfbilder[6]= granate ; kampfbilder[7]= seabeach ; kampfbilder[8]= drache ; kampfbilder[9]= dracheani ; kampfbilder[10]= kampfani ; kampfbilder[11]= gewonnen ; return kampfbilder; } public Image[] getOberbilder() { //die Bilder für die Oberfläche Image oberbilder[]=new Image[11]; oberbilder[0]= heldrechtslaufen; oberbilder[1]= heldrechtsstehen; oberbilder[2]= heldlinkslaufen ; oberbilder[3]= heldlinksstehen ; oberbilder[4]= heldobenlaufen ; oberbilder[5]= heldobenstehen ; oberbilder[6]= helduntenlaufen ; oberbilder[7]= helduntenstehen ; oberbilder[8]= hintergrund; oberbilder[9]= hintergrund2 ; oberbilder[10]= hintergrund3 ; return oberbilder; } } Das ist der bildladevorgang meines programmes dort passiert mir es immer ein bild ist auch ca.834kb groß. Ich hab schon danach gesucht aber ich bin zu blöd um das zu finden ^^ Zitieren
Peeter Geschrieben 8. Februar 2005 Geschrieben 8. Februar 2005 Oha... Du lädst ja alle Bilder auf einmal... Das ist zu viel für die VM. Große Bilder (wobei "groß" schon bei mehr als 200kb anfängt) erst dann laden wenn sie gebraucht werden und dann auch wieder frei geben und nicht die ganze Zeit im Speicher halten. Ansonsten mit den VM-Optionen "-Xms128m -Xmx256m" der VM mindestens 128 MB und maximal 256MB Speicher zuweisen. Das wäre das einzige was auf die schnelle hilft. Zitieren
manwhofindnoname Geschrieben 8. Februar 2005 Autor Geschrieben 8. Februar 2005 Oha... Du lädst ja alle Bilder auf einmal... Das ist zu viel für die VM. Große Bilder (wobei "groß" schon bei mehr als 200kb anfängt) erst dann laden wenn sie gebraucht werden und dann auch wieder frei geben und nicht die ganze Zeit im Speicher halten. Ansonsten mit den VM-Optionen "-Xms128m -Xmx256m" der VM mindestens 128 MB und maximal 256MB Speicher zuweisen. Das wäre das einzige was auf die schnelle hilft. Wo genau kann ich das einstellen ^^ Zitieren
Peeter Geschrieben 8. Februar 2005 Geschrieben 8. Februar 2005 Einfach mit an den Kommandozeilen-Aufruf anhängen... "java -Xms128m -Xmx256M -classpath .... .... ... Class" Zitieren
manwhofindnoname Geschrieben 8. Februar 2005 Autor Geschrieben 8. Februar 2005 Jo thx für den tip :uli hat super funktioniert das mehr ressorssen gebraucht werden ist nicht schlimm, ist ja sowieso ein Rollenspiel und man hat keine zeit was nebenher zu machen ^^ Zitieren
Peeter Geschrieben 9. Februar 2005 Geschrieben 9. Februar 2005 Aber nicht jeder hat 256MB Ram... Also ich würde es eher "ressourceschonender" programmieren. Und dazu gehärt nunmal den RAM-Verbrauch etwas zu minimieren... Du könntest die (größeren) Bilder wirklich erst zu der Zeit laden, wenn du sie wirklich brauchst. Zitieren
.Erbse Geschrieben 18. Februar 2005 Geschrieben 18. Februar 2005 Hi manwhofindnoname, Aber nicht jeder hat 256MB Ram... in dem Falle könnte der Garbage Collector helfen: mit Runtime.getRuntime().gc(); aufgerufen, löscht er alle Objekte die nicht gebraucht werden. Zitieren
Peeter Geschrieben 18. Februar 2005 Geschrieben 18. Februar 2005 Wobei das auch nix bringt, wenn die Bild-Objecte nicht freigegeben worden sind. Der GC gibt ja nur Speicher der Objecte frei, die wirklich nicht mehr gebraucht werden (null). Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.