Out of Memory (Java Heap Space)

torben

Mitglied
Hallo java-forum,

ich habe ein kleines Programm geschrieben, dass mir alle möglichen Permutationen einer Liste von Strings erzeugt, wenn ein neuer Buchstabe hinzukommt.

Java:
        LinkedList<String> pl =new LinkedList<String>();
        pl.add("0");
        pl=HelpClass.permutate(pl, '1');
        pl=HelpClass.permutate(pl, '2');
        pl=HelpClass.permutate(pl, '3');
        pl=HelpClass.permutate(pl, '4');
        pl=HelpClass.permutate(pl, '5');
        pl=HelpClass.permutate(pl, '6');
        pl=HelpClass.permutate(pl, '7');
        pl=HelpClass.permutate(pl, '8');
        pl=HelpClass.permutate(pl, '9');

Nach dem ersten Aufruf, sollte die Liste also folgende Einträge haben [01,10]. Nach dem zweiten Aufruf [201, 021, 012, 210, 120, 102].

Java:
    public static LinkedList<String> permutate (LinkedList<String> ref, char x){
        LinkedList<String> neu = new LinkedList<String>();
        int i, j,c=0;
        String s,s2;
        for (i=0; i<ref.size(); i++){
            s=ref.get(i);
            for (j=0; j<=s.length(); j++){
                if (j==0)
                    s2=x+s;
                else{
                    s2=s.substring(0,j)+x+s.substring(j); 
                }
                c++;
                neu.add(s2);
            }
        }
        System.out.println("c= "+c);
        return neu;
    }

Die Anzahl der Permutationen wächst in diesem Fall mit der Fakultät, d.h. nach dem letzten Aufruf sollte eine Liste mit 10!=3628800 Einträgen zurückgegeben werden. Genau bei diesem Durchgang erhalte ich aber folgenden Fehler:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:215)
at java.lang.StringBuilder.toString(StringBuilder.java:430)
at euler.HelpClass.permutate(HelpClass.java:46)

Der Fehler tritt also auf, wenn der String s2 aus den beiden substrings und dem char zusammengesetzt wird.
Benutze NetBeans 7.0.1 unter Mac OSX 10.6.8.

Erfolglose Versuche den Fehler zu beseitigen:
- Einsatz des Garbage Collector
- String s2 in jedem Durchlauf für j neu anlegen
- Vergrößerung der Heap Size in /Applications/NetBeans/NetBeans 7.0.app/Contents/Resources/NetBeans/bin/netbeans

Hat jemand von euch eine Idee was ich noch machen könnte? Langsam bin ich mit meinem Latein am Ende...

Schöne Grüße
torben
 
M

Marco01_809

Gast
Java Programme bekommen standard afaik maximal 256 oder 128MB, mit den Param "-Xmx" kannst du den maximalen Heap erhöhen,
auf der Konsole z.B. mittels "java -Xmx2048M -jar program.jar", wo man in Netbeans diese Params eingibt weiß ich nicht, in Eclipse geht das problemlos mittels Run/Debug-Settings -> Arguments -> VM.
 
S

SlaterB

Gast
jeder String bis zu 100 Byte, damit muss man schon rechnen, gerade bei LinkedList wo für jeden Eintrag ein neues Objekt mit Referenzen usw. benötigt wird, also allein dafür 30 Bytes und mehr, String dann vielleicht nur 70,
bei 4 Mio. jedenfalls brauchst du 400 MB Speicher..,
dann läuft das Programm auch, allerdings arg langsam, hab nach paar Minuten bei 1.5 Mio. aufgehört

ArrayList lieft danach in 5 sec durch, brauchte 'nur' 250 MB ;)
allerdings zwischendurch bisschen mehr, solange die alte Liste parallel noch vorhanden ist

@Marco01_809
64 MB soweit ich weiß/ so ist es bei mir
 
Zuletzt bearbeitet von einem Moderator:

torben

Mitglied
Java Programme bekommen standard afaik maximal 256 oder 128MB, mit den Param "-Xmx" kannst du den maximalen Heap erhöhen,
auf der Konsole z.B. mittels "java -Xmx2048M -jar program.jar", wo man in Netbeans diese Params eingibt weiß ich nicht, in Eclipse geht das problemlos mittels Run/Debug-Settings -> Arguments -> VM.

In NetBeans gehts so: Rechtsklick auf das verwendete Projekt -> Properties -> Run -> bei VM Options "-Xmx2048M" eingeben.

Vielen Dank für die Hilfe :)

@ SlaterB: Ja das Programm ist langsam, bei mir dauert es etwas mehr als 100 Sekunden. Bin für gute Ideen immer offen.
 
E

emailundlos

Gast
so kannst du das machen:

Java:
    public static char[][] perumtationen(char[] ca) {
        char[][] resul = new char[(int) Math.pow(2, ca.length)][ca.length];
        for (int i = 0; i < resul.length; i++) {
            int j = 0;
            for (int k = 0; k < ca.length; k++) {
                if (((i >> k) & 1) == 1) {
                    resul[i][j++] = ca[k];
                }
            }
        }
        return resul;
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
A Java memory leakage Java Basics - Anfänger-Themen 9
B Memory in Java Java Basics - Anfänger-Themen 16
B Image Matching in Memory Minigame Java Basics - Anfänger-Themen 7
B Memory Spiel Java Basics - Anfänger-Themen 29
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
V Memory Logik Problem/Denkblockade, bitte helft Java Basics - Anfänger-Themen 1
pinar memory spiel Java Basics - Anfänger-Themen 10
P NullPointerException in Memory-Spiel Java Basics - Anfänger-Themen 5
P Layout Manager - Welches Layout für Memory? Java Basics - Anfänger-Themen 7
S Datentypen Memory Problem Java Basics - Anfänger-Themen 12
I Memory-Spiel Feld nur einmal mischen Java Basics - Anfänger-Themen 2
O Memory Thread.sleep() Java Basics - Anfänger-Themen 5
K Memory-Spiel stecke Fest Java Basics - Anfänger-Themen 2
K Ein Memory Spiel ! Java Basics - Anfänger-Themen 6
K Memory-Spiel alle verdeckte karten aufdecken. Java Basics - Anfänger-Themen 26
T Memory Leak und der Garbage Collector Java Basics - Anfänger-Themen 21
A Memory Probleme beim Laden von thumbnails Java Basics - Anfänger-Themen 3
S memory heap problem Java Basics - Anfänger-Themen 9
J Memory Footprint von Objekten Java Basics - Anfänger-Themen 2
I Memory-Spiel Java Basics - Anfänger-Themen 2
W Servlet - out of memory Java Basics - Anfänger-Themen 7
G Memory-Spiel Java Basics - Anfänger-Themen 8
B Memory - Zufällige Anordnung von Buchstabenpaaren Java Basics - Anfänger-Themen 8
J Memory Java Basics - Anfänger-Themen 2
G Memory Projekt, Fragen über Fragen Java Basics - Anfänger-Themen 6
T Out of Memory Error Java Basics - Anfänger-Themen 7
E Heapspace out of Memory Java Basics - Anfänger-Themen 8
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

Ähnliche Java Themen

Neue Themen


Oben