2016-11-12 1 views
0
의 Java 힙 공간
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) 
파일에서 문자열을 읽고 배열 목록에 삽입하고 계산의 ahead.It을 많이하고있다 이클립스에 내 자바 프로그램에서 위의 예외를 throw

150 + 문자열이 발생했습니다. 나는 수면을 사용하여 VM 공간을 늘리려고했지만 아무것도 작동하지 않습니다! 궁극적 인 목표는 1 백만 개의 문자열을 조작하는 것입니다 (모두 고유하지는 않음).java.lang.OutOfMemoryError와 : 사용 ArrayLists

편집 : ArrayList의 toVisit의

사용법 : 클래스

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

VM 인수 : 이 -Xms1024M -Xmx1524M

누군가가이 일을하는 최적의 방법으로 나를 인도 할 수 있습니다. 사용할 수있는 다른 데이터 구조가 있습니까? 감사 !!

+1

추가 질문에 대한 귀하의 코드. Arraylist는 빨리 메모리를 다 써 버려서는 안됩니다. 오류는 arraylist를 사용하는 방법에 있습니다. – baseballlover723

+0

ecplise VM 인수를 표시하십시오. –

+1

코드에 더 많은 컨텍스트를 부여 할 수 있습니까? 모든 변수는 무엇입니까? 그들은 어디에서 왔니? 어딘가에 무한 루프가 있다고 나는 짐작할 수있다. – baseballlover723

답변

0

-Xmx6g를 사용하여 힙 공간을 늘릴 수 있지만 150 개의 문자열이 힙을 날려 버릴 정도로 작습니다. String 대신 StringBuffer 또는 StringBuilder를 사용하고 있는지 확인하십시오.

1

문제는 귀하의 알고리즘이 아니라 귀하의 메모리 설정에있는 것 같아요.

먼저 확인해야합니다 코드는 스택 트레이스에 인쇄하는 선에서 무엇 : FibonacciHeap.removemax (FibonacciHeap.java:148) 에서 UseFibonacciHeap.main (UseFibonacciHeap.java:61)에서