2016-11-30 6 views
0

Ich bekomme java.lang.OutOfMemoryError in einer meiner Java-Anwendung. Ich erhöhte Größe der minimalen und maximalen Speichergröße unter „VM Argumente“ in Eclipse:Weitere Gründe für "OutOfMemoryError"?

-XX:+HeapDumpOnOutOfMemoryError -Xmx8g -Xms2g However, I'm still getting same error. In jconsole.exe it displays the following: jconsole screenshot

Wenn ich es richtig verstanden habe, dann habe ich immer noch viel Heap-Speicher haben.

Ich analysierte auch das Speicherabbild Eclipse MAT mit MAT screenshot

Wie Sie sehen können, zeigt es Problem, aber nur 9 MB. Also, was ist genau das Problem? sollte ich nicht genug freien Heapspeicher haben?

+1

Sieht aus wie Ihr Problem nicht verfügbarer Speicher ist, aber [Speicherlecks] (https://en.wikipedia.org/wiki/Memory_leak). Egal wie viel Speicher Sie zuweisen, es wird schließlich ein OOM werfen. – m0skit0

+0

Könnten Sie Ihre Java-Version/Plattform angeben und die vollständige Exception Message einfügen? Es kann ein Permgen-Fehler sein, wenn <= 1.7, ... – pdem

+0

@pdem Ich habe 1.8 64bit. Vollständige Meldung "java.lang.OutOfMemoryError: Java-Heap-Speicher", dann wird der Stack-Trace gedruckt. Wie m0skit0 und JensB bereits erwähnt haben, hängt es mit Speicherlecks zusammen, die behoben werden müssen, und das Erhöhen des Heapspeichers löst das Problem nicht. –

Antwort

1

Nicht unbedingt in Bezug auf Java, aber dies kann auch durch den Versuch verursacht werden, etwas in Ihrem Speicher zu speichern, die nicht alle an einem Ort passen kann.

Betrachten Sie einen Parkplatz mit Metallstangen zwischen jedem Parkplatz. Es gibt 20 leere Motorradplätze. Sie möchten Ihren SUV parken. Auch wenn die Gesamtfläche des verfügbaren Platzes größer ist als Ihre Fahrzeuganforderung, können Sie immer noch nicht parken, da sie an keiner Stelle Platz findet.

Ich weiß nicht, ob das hier der Fall ist, aber das ist der häufigste Grund, dass ich auf dieses Problem stoßen.

Möchten Sie etwas speichern, das deutlich größer ist als alles andere, wo dieser Fehler auftritt?

+0

danke für die Erklärung. Ich denke, ich muss tiefer debuggen, dann ist der Code eigentlich nicht meins und es wird Zeit brauchen, um ihn zu debuggen und zu verstehen. Ich war neugierig, warum die Größe des Heapspeichers das Problem nicht lösen konnte. –

+0

Sie haben Recht. Ich habe das Problem gefunden, es wurde versucht, ein Array von "1836020326" -Elementen zu erstellen! Diese Nummer wurde falsch aus falschen String-Daten analysiert. –