Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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????

Geschrieben

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

Geschrieben

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 ^^

Geschrieben

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.

Geschrieben
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 ^^

Geschrieben

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.

  • 2 Wochen später...
Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...