# Out of Memory error



## MiRaMC (28. Oktober 2004)

Hallo zusammen hoffentlich kann mir jemand helfen!

Ich hab ein großes Problem:

Ich hab ein Programm geschrieben, dass sehr viele ImageIcons enthält. Jetzt gibt es immer bein Programmstart einen Out if Memory Error. Wie kann man das Vermeiden ohne dass man ImageIcons weglassen muss?

Danke an alle die helfen könne schon mal im voraus!


----------



## Thomas Darimont (28. Oktober 2004)

*Re: ! Out of Memory error !*

Hallo!

Du könntest die Maximale Größe des Heaps für die VM erhöhen:

Die übersicht über die dafür notwendigen Befehle erhälst du über:

```
java -X
```
Ausgabe:


> C:\>java -X
> -Xmixed           mixed mode execution (default)
> -Xint             interpreted mode execution only
> -Xbootclasspath:<directories and zip/jar files separated by ;>
> ...



Der Parameter den wir brauchen ist -Xmx<size> wobei <size> eben die größe des maximalen Heaps angibt.


> Mögliche Parameter wären:
> -Xmx64M -> 64 MB Maximale Heaps Größe (Standard: 64MB)
> -Xmx81920k ->  81920kbytes
> -Xmx83886080 -> 83886080bytes


Versuchs beispielsweise mal mit:


```
java -Xmx256M MainKlasse
```

Jedoch ist das nicht die Lösung für dein Problem sondern zögert diese nur hinaus.
Schau lieber mal noch ob du noch irgendwo Referenzen auf nicht mehr benötigte ImageIcon Instanzen. Wenn das der Fall ist kann der Garbage Collector die Objekte nicht aus dem Speicher räumen. Es ist immer besser seine Anwendung erstmal dahingehend zu Optimieren als "die Umgebung" zu ändern.

Gruß Tom


----------



## Vincentius (29. Oktober 2004)

Hallo,

ein OutOfMemory Error tritt oft bei Endlosschleifen auf. Initialisierst Du die ImageIcons in einer Schleife? Du musst Deinen Code genauer untersuchen, am besten in Debug-Modus.


----------



## squeaker (29. Oktober 2004)

Kann es sein, dass du häufig Objekte creierst und sofort wieder verwirfst? Wenn du das schnell machst kommt die Garbage-Collection nicht nach. Da hilft dann ein gezielter aufruf der gc (oder ein anderes Design mit einem Objekt-Pool).


----------



## schnuffie (29. Oktober 2004)

Falls sich Deine Objekt-Erstellungen im Rahmen halten und auch die Schleife fehlerfrei ist, könnte es vielleicht sein, daß Deine Bilder mit Anzahl und Größe zu viele Bytes "fressen". Vielleicht solltest Du die Bildgrößen reduzieren. Positiver Nebeneffekt währe dann auch sinkende Ladezeit.

CU schnuffie


----------



## MiRaMC (5. November 2004)

Danke ihr habt mir alle sehr geholfen!

Ich hab jetzt erst mal die Größe der Bilder reduziert und jetzt gehts wieder. Fragt sich bloß wie lang?  ;-)


----------



## squeaker (5. November 2004)

Besorg dir mal eine Profiler-Software. Die kann aufdecken, wo der Speicher gebraucht wird und du kannst dann damit geziehlt dagegen vorgehen.


----------



## jean luc (2. Dezember 2004)

Hallo,
ich habe ein ganz ähnliches Problem:
Ich habe auf der rechten Seite einen Baum, wenn auf ein Blatt geklickt wird erscheint auf der linken Seite der Anwendung ein Panel mit einem Bild. Das ganze liegt natürlich in einem SplitPane.

Ich habe alle Vorschläge hier ausprobiert aber es führte nicht zum Erfolg. Wenn ich einige Male im Baum klicke bekomme ich die Java Out of Memory Fehlermeldung.
Beim Klick wird nur dieser Code durchlaufen:

                ResultSet res = Frame.db.query(
                    "SELECT PersonID FROM Person WHERE ( Name ='" + name +
                    "' AND"
                    + " Vorname='" + vorname + "')");
                res.next();
                personId = res.getLong("PersonID");

                Register reg = new Register(personId);                

                splitPane.setRightComponent(reg);
                splitPane.setDividerLocation(dividerLocation);
                res.getStatement().close();


Woran kann das noch liegen?
Wo gibt es so eine Profiler Software am besten noch umsonst?

Gruß SIMON


----------

