Java Heap Space Probleme

Don83

Bekanntes Mitglied
Hallo,

ich hadere gerade mit einem Programm...
Mein Programm erstellt Vergleiche. Hierzu werden 3 Listen erstellt, 2 führen eine ID eine führ einen Gewichtswert.
Diese Listen haben jeweils eine Größe von fast 14 Millionen einträgen.
An einer Stelle möchte ich nun die IDs zu einer Liste verknüpfen. Dies sieht wie folgend aus:
Java:
keys.add(id1List.get(i)+sep+id2List.get(i));
Daraufhin gibt es folgenden Fehler:
Code:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOfRange(Unknown Source)
	at java.lang.String.<init>(Unknown Source)
	at java.lang.StringBuilder.toString(Unknown Source)
Nun, ich habe bereits folgende Parameter angegeben:
-Xms512m -Xmx1024m

Die Listeneinträge lassen sich ebenfalls nicht reduzieren. Würde es etwas bringen die VM Parameter zu erhöhen? Woher weis ich was die maximal möglichen Werte für die VM sind? Und generell - wieso ist das zusammenfügen zweier Listen so problematisch. Wie gesagt, die Liste wird nicht verdoppelt sondern nur die Stringinhalte in einen String umgewandelt!

Also falls wer Tricks kennt um mit diesen Memory Problemen umzugehen nur zu :D... Leider ist das ganze schwer zu Testen da ein Durchlauf 1 Stunde dauert (zumindest auf so vielen Vergleichen).
 

Ark

Top Contributor
Das klingt spontan ein bisschen so, als würde das zu lösende Problem grundsätzlich falsch angepackt. Zeig doch mal den Code, denn ohne Code kommt man hier nicht mehr sinnvoll weiter.

Ark
 

Don83

Bekanntes Mitglied
Hallo,
das Programm hat über 1000 Zeilen code die ich auch nicht unbedingt öffentlich machen will und die Erzeugung der mehreren Mio Vergleiche ist gewollt und auch soweit korrekt. Das heisst bis zum Erzeugen der Vergleiche/Listeneinträge in die 3 Listen kann ich nichts am Programm verändern. Danach möchte ich mit diesen Listen Aktionen durchführen, z.B. sortieren usw.. Also grundsätzlich weis ich nurnoch nicht wie ich mit solch großen Arraylists umgehen soll.
 

Lumaraf

Bekanntes Mitglied
Ich glaube du unterschätzt den Speicherbedarf der Listen etwas.

Eine ArrayList mit 14Mio Integer Werten belegt alleine schon etwas über 200MB. Eine ArrayList mit 14Mio Strings (mit einer durschschnittlichen Länge von 15 Zeichen) liegt schon bei über 800MB. Grob geschätzt mußt du der JVM mindestens 1400MB zuteilen damit dein aktueller Code funktioniert. Einer 32Bit JVM kann man afaik bis zu 1500MB problemlos zuweisen.
 

Ark

Top Contributor
Ich bin mir nicht sicher, meine aber, dass pro Objekt noch mal 16 Bytes an Overhead dazukommen (kann mich auch irren). Allein für die Strings kämen dann also noch mal 224 MiB dazu, und die Integer-Objekte in der ArrayList verdoppeln diesen Wert im schlechtesten Fall.

@Don83: Wenn ich mal raten darf: Es sieht so aus, aus würde eine gigantisch große Datei komplett eingelesen, dann der Inhalt im Arbeitsspeicher verarbeitet, und das Ergebnis soll dann wieder in eine Datei hinausgeschrieben werden. Wenn dem so ist: Versuche, die Einträge "on the fly" zu verarbeiten. Da du von Vergleichen sprichst, könnte sich dies auf direktem Wege etwas schwierig gestalten.

Dennoch: Ohne Code kann man sonst nicht wirklich viel machen.

Ark
 
S

SlaterB

Gast
die 1 Stunde Bearbeitungszeit ist auch etwas fragwürdig, vielleicht zur Zusammenstellung der Daten,
an sich kann man paar GB Arbeitsspeicher in Sekunden vollschreiben

Java:
public class Test2 {
    public static void main(String[] args)   {
        mem();
        List<String> l = new ArrayList<String>();
        for (int j = 0; j < 40; j++)  {
            for (int i = 0; i < 2000000; i++)     {
                l.add("Test Test " + i);
            }
            mem();
        }
    }

    public static void mem()  {
        Runtime runtime = Runtime.getRuntime();
        System.out.println(runtime.totalMemory() - runtime.freeMemory());
    }
}

sollte man eben nicht tun, in Datei zwischenspeichern, ganz drauf verzichten usw.
 

Lumaraf

Bekanntes Mitglied
Ich bin mir nicht sicher, meine aber, dass pro Objekt noch mal 16 Bytes an Overhead dazukommen (kann mich auch irren). Allein für die Strings kämen dann also noch mal 224 MiB dazu, und die Integer-Objekte in der ArrayList verdoppeln diesen Wert im schlechtesten Fall.

Unter einer 32Bit JVM belegt ein Integer Objekt genau 32 Byte. (4Byte für den Typ+4Byte für System#identityHashCode()+4Byte für den Wert+4Byte Overhead durch das Alignment auf 8Byte)
Der Overhead bei Strings muß btw doppelt berechnet werden da ja jedes String-Objekt auch noch ein char[] enthält.
 

Don83

Bekanntes Mitglied
Ich bin mir nicht sicher, meine aber, dass pro Objekt noch mal 16 Bytes an Overhead dazukommen (kann mich auch irren). Allein für die Strings kämen dann also noch mal 224 MiB dazu, und die Integer-Objekte in der ArrayList verdoppeln diesen Wert im schlechtesten Fall.

@Don83: Wenn ich mal raten darf: Es sieht so aus, aus würde eine gigantisch große Datei komplett eingelesen, dann der Inhalt im Arbeitsspeicher verarbeitet, und das Ergebnis soll dann wieder in eine Datei hinausgeschrieben werden. Wenn dem so ist: Versuche, die Einträge "on the fly" zu verarbeiten. Da du von Vergleichen sprichst, könnte sich dies auf direktem Wege etwas schwierig gestalten.

Dennoch: Ohne Code kann man sonst nicht wirklich viel machen.

Ark

Ja also die Situation ist folgende. Es werden 2 Datein mit jeweils 50.000 Zeilen eingelesen. Diese werden dann verglichen = (2.5 Milliarden Vergleiche). Das ganze 3* also 7.5 Milliarden Vergleiche. Allerdings nur im worst case. Wie gesagt in meinem Fall kommen dabei 14 Millionen Vergleiche raus, also deutlich weniger. Soweit klappt alles - jetzt muss ich die Daten nurnoch nachverarbeiten und würde die Vergleiche dafür gerne in eine Datei schreiben. Davor will ich die Daten sortieren. Um die drei Listen zu sortieren will ich sie in einer Liste vereinen und dann nur die eine Liste sortieren. Ob das sortieren dann klappt weis ich nicht, denn es hängt ja bereits beim zusammenführen der Daten. Man könnte das ganze natürlich an eine DB anschließen und vielleicht direkt dort reinschreiben, allerdings soll das Programm ja mobil sein und ich will nicht immer eine DB einrichten für den Extremfall der eh nur unwahrscheinlich eintritt! Nunja, meine idee ist jetzt die Sortierung erstmal rauszunehmen und unsortiert in die Datei zu schreiben. Dann muss man nicht immer diesen 1 Stunde Prozess vorlaufen lassen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java heap space Fehlermeldung beheben Java Basics - Anfänger-Themen 3
M Java Arbeitsspeicherverbrauch, Heap Space error korrigieren? Java Basics - Anfänger-Themen 18
S Input/Output Java heap space Java Basics - Anfänger-Themen 8
A Java heap space Java Basics - Anfänger-Themen 11
T Out of Memory (Java Heap Space) Java Basics - Anfänger-Themen 9
D java heap space Java Basics - Anfänger-Themen 6
S Java Heap space trotz -Xmx1024 Java Basics - Anfänger-Themen 10
C 'OutOfMemoryError: Java heap space' Java Basics - Anfänger-Themen 5
D java.lang.outofmemoryerror java heap space bei Hashtable Java Basics - Anfänger-Themen 3
neurox java.lang.OutOfMemoryError: Java heap space Java Basics - Anfänger-Themen 18
B java.lang.OutOfMemoryError: Java heap space bei Musikplayer Java Basics - Anfänger-Themen 7
M Java Heap Space durch Übergang von einer Klasse in die ander Java Basics - Anfänger-Themen 3
M Beadarf ermitteln für Java heap space Java Basics - Anfänger-Themen 4
R Java heap space Java Basics - Anfänger-Themen 4
S OutOfMemoryError: Java heap space Java Basics - Anfänger-Themen 6
M Java Heap Space während der Laufzeit ändern Java Basics - Anfänger-Themen 2
E fehlermeldung "java heap space" Java Basics - Anfänger-Themen 21
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
J Morgen Java-Klausur. Stack, Heap, Method-Area Java Basics - Anfänger-Themen 2
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben