# OutOfMemoryError: Java heap space



## at0m (20. Jun 2017)

Hallo zusammen,

ich bin dabei eine Maven-Applikation zu entwickeln. Diese endet bei einem bestimmten Zeitpunkt bei der o.g. Fehlermeldung.

Ich muss dazu sagen, dass meine Managed Bean, die für die Logik zuständig ist, recht komplex ist (1400 Zeilen, inkl. Getter/Setter). Diese ist SessionScoped.

Ich habe bereits versucht die Speichergröße in der pom.xml zu vergrößern (hier auf die maximale Größe):


```
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20</version>
    <configuration>
        <argLine>-Xmx4g</argLine>
    </configuration>
</plugin>
```

Die Applikation läuft auf einem 64bit Ubuntu Server. Weiß jemand, was ich noch probieren könnte? Bei Bedarf kann ich natürlich den entsprechenden Code posten.


----------



## mrBrown (20. Jun 2017)

Du solltest mal nen Profiler anwerfen, mehr als "irgendwas verbraucht zu viel Speicher" kann man sonst nicht sagen 

Ob irgendeine Klasse komplex ist, sagt über den Speicherverbrauch nicht viel aus - klingt aber sehr danach, dass sie aufgeteilt werden sollte


----------



## VfL_Freak (20. Jun 2017)

Moin,
und google mal nach dem Stichwort "Speicherleck"!

Idee: möglicherweise wird irgendein Objekt nicht (richtig) geschlossen und dadurch Speicher nicht freigegeben.
Hast Du viele _new's_ im Code?

Aber wie @mrBrown schon schrieb: nimm' eine Profiler.
In der Java-Installation gibt es einige kostenfreie: jconsole, jvisualvm, jmc 

VG Klaus


----------



## at0m (21. Jun 2017)

Vielen Dank für die Antworten! Ich bin noch nicht all zu lange dabei, was Java EE betrifft.

Habe mal jconsole laufen lassen. Sieht wie folgt aus:







Am letzten Peak, innerhalb des Heap-Diagramms, erhalte ich die genannte Fehlermeldung. Ich sehe zwar, an welcher Stelle, innerhalb des Programmablaufs, der Heap voll läuft aber ich erkenne noch nicht genau welche Ursache das hat bzw. welches Objekt diesen Fehler genau verursacht oder?


----------



## mrBrown (21. Jun 2017)

Mehr als 470Mb Speicher kannst du dem Programm schon zuweisen, das ist nicht sonderlich viel...

Du kannst dir aber sicherlich auch irgendwie die Anzahl der Objekte anzeigen lassen, das ist das interessantere


----------



## Thallius (21. Jun 2017)

Also ich finde 470MB schon verdammt viel. Den Speicher hochzuschrauben kann nicht Sinn der Sache sein. Wenn dann muss er auch wissen was da soviel Speicher verbraucht und entsprechend entscheiden ob das nun abänderbar ist oder nicht. Früher hat man ganze Firmendatenbanken in 5MB bekommen.

Gruß

Claus


----------



## VfL_Freak (21. Jun 2017)

Moin,
man sollte aber bedenken, dass da aber IMHO der Speicherverbrauch der JVM mit drin ist.

Aber, wie @mrBrown schon schrieb:


mrBrown hat gesagt.:


> die Anzahl der Objekte anzeigen lassen


Wie gesagt, vermutlich wird irgendwo irgendwas nicht wieder geschlossen ....
VG Klaus


----------



## at0m (21. Jun 2017)

Vielen Dank! Ich versuche mich hier mal etwas durchzuwühlen, inkl. Refactoring und melde mich dann noch mal bei Bedarf.


----------

