2016-11-12 4 views
0
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.Arrays.copyOf(Unknown Source) 
    at java.util.ArrayList.grow(Unknown Source) 
    at java.util.ArrayList.ensureExplicitCapacity(Unknown Source) 
    at java.util.ArrayList.ensureCapacityInternal(Unknown Source) 
    at java.util.ArrayList.add(Unknown Source) 
    at FibonacciHeap.removemax(FibonacciHeap.java:148) 
    at UseFibonacciHeap.main(UseFibonacciHeap.java:61) 

Mein Java-Programm auf Eclipse-Strings aus einer Datei zu lesen und sie zu einer Array-Liste eingefügt und viele Berechnungen ahead.It tat die oben genannten Ausnahmen wirft Ich habe versucht, den VM-Raum zu vergrößern, benutze den Schlaf, aber nichts funktioniert! Das letztendliche Ziel ist es, mit 1 Million Strings zu arbeiten (nicht alle einzigartig).java.lang.OutOfMemoryError: Java Heap-Speicher zur Verwendung von Arraylists

Edits:

Verwendung der Arraylist toVisit:

for (FibonacciNode curr = max_ptr; toVisit.isEmpty() || toVisit.get(0) != curr; curr = curr.right_sibling) 
{ 
    toVisit.add(curr); 
    ... 
} 

VM Argumente für die Klasse: -Xms1024M -Xmx1524M

mich jemand auf eine optimale Art und Weise, dies zu tun führen kann. Gibt es eine andere Datenstruktur, die ich verwenden kann? Vielen Dank !!

+1

add Dein Code zu der Frage. Arraylist sollte nicht schnell genug aus dem Speicher gehen, so ist es sehr wahrscheinlich, dass der Fehler darin besteht, wie Sie Ihre Arraylist verwenden – baseballlover723

+0

zeigen Sie Ihre ecplise vm Argumente –

+1

können Sie etwas mehr Kontext zum Code geben? Was sind alle Variablen? woher kommen sie? Ich nehme an, dass du irgendwo eine Endlosschleife hast. – baseballlover723

Antwort

0

Sie können Ihren Heap-Speicherbereich mit -Xmx6g erhöhen, aber 150 Strings scheint eine schrecklich kleine Zahl zu sein, um den Haufen zu sprengen. Stellen Sie sicher, dass Sie StringBuffer oder StringBuilder anstelle von String verwenden.

1

Ich denke, das Problem befindet sich in Ihrem Algorithmus und nicht in Ihrer Speichereinstellung.

Zuerst sollten Sie überprüfen, was der Code tut an den Linien, die in der stacktrace gedruckt: bei FibonacciHeap.removemax (FibonacciHeap.java:148) bei UseFibonacciHeap.main (UseFibonacciHeap.java:61)

Verwandte Themen