Problem beim laden von vielen Bildern

Status
Nicht offen für weitere Antworten.

metaller

Mitglied
Hi Leute,

ich hab ein Problem beim Laden von Bildern in ein Applet. Das Applet soll die Bilder als kleine Vorschau anzeigen.
Und solange ich wenig Bilder lade, geht auch alles gut. Sobald ich mehr Bilder laden kriege ich bei folgende Fehlermeldung.

Exception in thread "Thread-XY" java.lang.OutOfMemoryError: Java heap space

Die ersten ca. 20 Bilder werden fehlerfrei geladen. Danach geht gar nix mehr.

Die Bilder lade ich Verzeichnisweise mit einer for schleife:
Code:
		File f = new File(directory);
		File[] fList = f.listFiles();
		for (int i = 0; i < fList.length; i++) {
			try {
				String name = fList[i].getName();
				String ext = name.substring(name.lastIndexOf("."))
						.toLowerCase();
				int typ = 0;
				if (ext.equals(".jpg"))
					typ = Picture.JPG;
				if (ext.equals(".bmp"))
					typ = Picture.BMP;
				if (ext.equals(".gif"))
					typ = Picture.GIF;
				if (ext.equals(".png"))
					typ = Picture.PNG;
				if (ext.equals(".tif"))
					typ = Picture.TIF;
				if (typ != 0)
					addBildObjekt(fList[i].getAbsolutePath(), fList[i]
							.length(), typ);
			} catch (java.lang.StringIndexOutOfBoundsException e) {}

dann wird das Ganze noch ein bischen weiter übergeben und dann kommt das laden:

Code:
public void loadImage(String path) {
		double scale = 0;
		switch (typ) {
		case JPG:
		case GIF:
		case PNG:
			ImageIcon image = new ImageIcon(path);
			this.width = image.getIconWidth();
			this.height = image.getIconHeight();
			this.width = 100;
			this.height = 100;
			if (width / 80.00 > height / 60.00)
				scale = width / 80.00;
			else
				scale = height / 60.00;
			this.iiBild = image.getImage().getScaledInstance(
					(int) (width / scale), (int) (height / scale),
					Image.SCALE_FAST);
			iiBild.flush();
			break;
		case BMP:
		case TIF:
			Image temp = Jimi.getImage(path);
			this.width = temp.getWidth(this);
			this.height = temp.getHeight(this);
			if (width / 80.00 > height / 60.00)
				scale = width / 80.00;
			else
				scale = height / 60.00;
			this.iiBild = temp.getScaledInstance(
					(int) (width / scale), (int) (height / scale),
					Image.SCALE_FAST);
			temp.flush();
			break;
		}
	}

Ich hab schon mit flush() versucht die Speicher wieder freizugeben. Aber irgendwie werden die anscheinend doch gecacht. Ich hab schon gegooglet aber irgendwie nich das gefunden was ich gesucht hab.

Das einzige was ich gefunden hab waren vielleicht die verwendung von VolatileImage oder einfach der Vergrößerung des Heap Space.

Wäre cool wenn jemand eine Idee hätte was ich ändern muss denn ich weiß nicht mehr was ich machen soll. Danke im vorraus.
 

Wildcard

Top Contributor
Wie groß sind die Bilder denn? (nicht in kb, sondern in pixel).
Wenn sie den Heap komplett füllen kann man nämlich nichts machen. Du kannst eben keinen Speicher herzaubern.
 

metaller

Mitglied
Ich hab jetzt mit jetzt mal den Speicherstand anzeigen lassen (zumindest wenn das die richtigen Methoden sind)

Code:
System.out.println("max:"+Runtime.getRuntime().maxMemory()/1024.0/1024.0);
System.out.println("free"+Runtime.getRuntime().freeMemory()/1024.0/1024.0);

Und das ergebnis war 64Mb Heap Space und nachdem ich die Bilder ins Vorschaufenster geladen hab, sind noch 22MB frei. Das heißt ja das die Bilder ca. 42MB groß sind minus das bischen was das Applet selbst braucht. Das Lustige is aber das die Bilder in Orginalgröße insgesamt nur 30MB groß sind.
 

Wildcard

Top Contributor
metaller hat gesagt.:
Und das ergebnis war 64Mb Heap Space und nachdem ich die Bilder ins Vorschaufenster geladen hab, sind noch 22MB frei. Das heißt ja das die Bilder ca. 42MB groß sind minus das bischen was das Applet selbst braucht. Das Lustige is aber das die Bilder in Orginalgröße insgesamt nur 30MB groß sind.
Was du natürlich überhaupt nicht vergleichen kannst, da die Originale komprimiert sind :wink:
 

metaller

Mitglied
Ganz genau! :D :oops:

Ja aber das Komische is ja auch das die Bilder die er sich im Speicher halten soll nur 60 * 80px sind, und ich die Vermutung hab, das die großen Orginalbilder irgendwo gecacht werden obwohl ich sie flushe, warum auch immer. Denn von den 60*80ern müsst ich doch problemlos mindestens 100 speichern können bei 64MB.
 

Wildcard

Top Contributor
Sehe ich auch so. Die Bilder sind zu klein um alleine den Speicher vollzumüllen.
Versuch mal ein paar manuelle GC Aufrufe und zieh dir einen Heap Dump mit einem Profiler, dann sieht man eventuell weiter.
 

metaller

Mitglied
Ja, das mit dem gc() hatte ich schonmal versucht, hatte aber nix gebracht.
Und ich hab das Ganze jetzt mal mit dem Eclipse Profiler profiled. Aber ich weiß nich genau auf was ich da gucken muss oder ob ich die richtigen Einstellungen gemacht hab. ???:L Gibts da nen Link wo das gut erklärt is?
 

mikachu

Top Contributor
Wegen des Speicherproblems hätt ich da ne Lösung!
Gib eclipse einfach mehr speicher :D

unter %ECLIPSE_HOME% gibt es ne eclipse.ini.
dort stehen ein paar werte drin
Xms ist der StandardSpeicher, den eclipse belegt
Xmx ist der ExtendedSpeicher, welcher maximal belegt wird.

ich hab beide etwas erhöht. (Xms auf 128 und Xmx auf 512)
 
G

Guest

Gast
Hat denn jemand eine Idee, wie man den OutOfMemoryError abfangen bzw. umgehen kann, ich kann ja nicht einfach ne try catch drumsetzten. Und über
Code:
if(Runtime.getRuntime().totalMemory()>Runtime.getRuntime().maxMemory)
kann ich das auch irgendwie nich abfangen.
 

metaller

Mitglied
So Leute, ich hab's endlich gelöst. Hab die Bilder mal anders geladen.
Hatte bis jetzt immer

Code:
Image temp = Jimi.getImage(path, Jimi.SYNCHRONOUS);

hab jetzt aus lauter Verzweiflung einfach mal

Code:
Image temp = Jimi.getImage(path, Jimi.ONE_SHOT);

genommen. habe eigentlich gedacht das bei synchronem Laden der Speicher wieder freigegeben wird, hab mich wohl getäuscht :roll: :D . Naja jetzt geht's auf jeden Fall.
Nochma danke für eure Lösungsvorschläge.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Apo JNI-Problem beim erneuten Laden einer dll Allgemeine Java-Themen 28
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
G Problem beim GUI Allgemeine Java-Themen 9
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
D Selenium WebDriver HtmlUnitDriver Problem beim Automatisieren Allgemeine Java-Themen 1
F Problem beim Speichern eines Attachments Allgemeine Java-Themen 3
M Problem beim Starten der Anwendung Allgemeine Java-Themen 3
O Problem beim Auslesen einer Arraylist von JComboBoxen Allgemeine Java-Themen 2
GUI-Programmer JNI - Problem beim Erstellen der .dll Allgemeine Java-Themen 9
D Problem mit Referenzen beim Serialisieren Allgemeine Java-Themen 3
R Problem beim vCard Manipulieren Allgemeine Java-Themen 2
Rudolf Problem beim Visitorpattern Allgemeine Java-Themen 2
J Problem beim Auslesen einer Datei vom Server Allgemeine Java-Themen 4
M Problem beim schreiben einer eigene generische Klasse Hashtable Allgemeine Java-Themen 11
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
M Problem beim schreiben einer eigene generische Klasse LinkedList Allgemeine Java-Themen 34
N Problem beim lesen einer File in JAR-File Allgemeine Java-Themen 3
N iText Problem beim verlinken anderer PDFs Allgemeine Java-Themen 2
M Problem beim Drucken von PDFs Allgemeine Java-Themen 3
H Problem beim Sortieren einer HashMap mit TreeSet Allgemeine Java-Themen 4
I Problem beim Ausführen von Shell Commandos Allgemeine Java-Themen 3
O Problem beim Ausgeben von Arrays Allgemeine Java-Themen 9
L Problem beim animieren von Bildern in Applet Allgemeine Java-Themen 23
C Problem beim einlesen bestimmter Seiten Allgemeine Java-Themen 5
S Problem beim Drucken auf Netzwerkdrucker unter Linux Allgemeine Java-Themen 9
S Problem beim Anlegen eines JDialogs! Allgemeine Java-Themen 4
A Problem mit ShutdownHook beim schließen Allgemeine Java-Themen 7
S Problem beim Löschen des Inhalts des Fensters Allgemeine Java-Themen 4
A Problem beim serialisieren/deserialisieren einer ArrayList Allgemeine Java-Themen 3
M Problem beim Umrechnen von Pixel in cm. Allgemeine Java-Themen 6
M Problem beim ausführen von Batchdateien Allgemeine Java-Themen 21
Escorter Problem beim starten von Batchfiles Allgemeine Java-Themen 4
A Problem beim Starten der H2-Datenbank Allgemeine Java-Themen 4
L WindowsTrayIcon in Java 1.4 - Problem beim ausführen der JAR Allgemeine Java-Themen 2
E Problem beim Anlegen einer Datei Allgemeine Java-Themen 4
E Problem beim Dateien kodieren ("Byte = Byte +1") Allgemeine Java-Themen 3
G Problem beim starten von eclipse product Allgemeine Java-Themen 2
M Problem beim Erstellen eines Objektes Allgemeine Java-Themen 3
S Problem beim Einlesen von byte-werten aus datei Allgemeine Java-Themen 2
H Problem beim Malen auf ein Panel Allgemeine Java-Themen 2
G iText: Problem beim Drucken von AcroFormen Allgemeine Java-Themen 2
E Problem beim fertigen Programm die Hintergrundfarbe ändern Allgemeine Java-Themen 8
karambara Sonderzeichen-Problem beim Lesen und Speichern von Dateien Allgemeine Java-Themen 6
R Problem beim Datentransfer Allgemeine Java-Themen 19
C Problem beim Umstieg von Java1.4 auf 1.5 Allgemeine Java-Themen 5
K javax.comm Problem beim starten aus .jar heraus Allgemeine Java-Themen 3
S Problem beim Bearbeiten von Java-Dateien unter Linux Allgemeine Java-Themen 3
S Hab ein Problem! Bei Dame! Beim Umranden! Allgemeine Java-Themen 2
G Problem beim speichern von Dateien Allgemeine Java-Themen 8
M Problem mit PageFormat beim Drucken Allgemeine Java-Themen 2
Streeber Problem beim Kompilieren und Ausführen Allgemeine Java-Themen 20
E Problem beim Compilieren Allgemeine Java-Themen 6
O JNI Problem beim kompilieren Allgemeine Java-Themen 2
M Codepage Problem (Vertauscht Zeichen beim Lesen aus Datei) Allgemeine Java-Themen 3
P Problem beim "spliten" eine Textdatei Allgemeine Java-Themen 3
F Problem beim Drucken mit javax.print Allgemeine Java-Themen 2
Z Problem beim Aufruf eines Listener? Allgemeine Java-Themen 4
bernd Problem beim kopieren! Allgemeine Java-Themen 2
B problem beim erstellen einer ausführbaren jar-datei Allgemeine Java-Themen 5
A Problem beim Aufruf von javac Allgemeine Java-Themen 7
J JFrame Problem beim schließen Allgemeine Java-Themen 2
S Problem beim Zugriff auf Internetseiten Allgemeine Java-Themen 4
R Problem beim speichern von eigenem objekt Allgemeine Java-Themen 6
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben