Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

OutOfMemoryError

Empfohlene Antworten

Veröffentlicht

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

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

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

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.

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

Einfach mit an den Kommandozeilen-Aufruf anhängen...

"java -Xms128m -Xmx256M -classpath .... .... ... Class"

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

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

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.

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).

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.