2013-10-26 2 views
0

Eclipse Kepler IDE를 사용하여 Java에서 매우 작은 프로그램을 수행하고 있습니다.java.lang.OutOfMemoryError : 배열 크기 할당시 Java 힙 공간

다음 문을 사용하여 런타임에 배열의 크기를 할당합니다.

unSortedArray = new int[sizeRow][sizeColumn]; 

내 지식에 따라 Java 프로그램은 32MB와 같은 일부 자체 힙 공간에서 실행됩니다.

내 프로그램에 대해서는이 공간으로 충분하다고 생각합니다.

런타임에 값 sizeRow=3sizeColumn=3을 방금 지정했습니다.

그리고 내가 입력을 누를 때 나는 그런 일이 이유를 이해하기 위해 질문을 넣어 우리가 그것을 처리 할 수있는 방법 java.lang.OutOfMemoryError: Java heap space

다음과 같은 예외를 준다?

나는 이미 다음 링크를 읽었습니다.

java.lang.OutOfMemoryError: Java heap space

How to deal with "java.lang.OutOfMemoryError: Java heap space" error (64MB heap size)

편집 : 내 경우 1

public class ArraySort 
{ 
private int[][]     unSortedArray; 
private int      sizeColumn, sizeRow; 

private final DataInputStream dataInputStream = new DataInputStream(
                 System.in); 

public boolean getArraySize() throws IOException 
{ 
    try 
    { 
     System.out.print("Enter the size of the row:"); 
     sizeRow = (dataInputStream.readInt()); 
     System.out.print("Enter the size of the column:"); 
     sizeColumn = dataInputStream.readInt(); 
     return false; 
    } 
    catch (NumberFormatException e) 
    { 
     System.out.println("Enter valid value for size:"); 
    } 
    return true; 
} 

public boolean getArrayElement() throws IOException 
{ 
    unSortedArray = new int[sizeRow][sizeColumn]; 
    for (int i = 0; i < sizeRow; i++) 
    { 
     for (int j = 0; j < sizeColumn; j++) 
     { 
      try 
      { 
       System.out.println("Enter Element [" + i + "," + j + "]"); 
       unSortedArray[i][j] = dataInputStream.readInt(); 
      } 
      catch (NumberFormatException ne) 
      { 
       System.out 
         .println("Enter proper Numeric value for Array Element"); 
       return true; 
      } 
     } 
    } 
    return false; 
} 
} 


public class ArraySortProgram 
{ 

public static void main(String[] args) throws IOException 
{ 
    ArraySort arraySort = new ArraySort(); 

    arraySort.getArraySize(); 
    arraySort.getArrayElement(); 
} 
} 

내가 한 번만이 메소드를 호출하고 있습니다. 당신이 우리를 보여으로

+0

오류 이런 종류는 처리 할 수없는,하지만 당신은 한 번에 전체 코드를 게시 할 수있는 나는, 이런 일이 왜 확실하지 않다 :

은 다음과 같이 당신의 정수를 읽을 Scanner를 사용해보십시오. – Batty

+0

그래서'int's의 3x3 배열을 만들고 OOME을 얻습니다. 정말? – Vidya

+0

예. 지구 주위를 돌고있는 태양처럼 보입니다 : P하지만 약간의 포획이 있어야합니다 !! – Batty

답변

2

문제는 여기에 있습니다 :이 "1251"움을 야기 입력 당신을 위해 2323827382처럼 될 것입니다 귀하의 의견에서 이진 값을 읽을 것

dataInputStream.readInt() 

.

public class ArraySort{ 
    private final Scanner scanner = new Scanner(System.in); 

    int sizeRow, sizeColumn; 

    public boolean getArraySize() throws IOException 
    { 
     try 
     { 
      System.out.print("Enter the size of the row:"); 
      sizeRow = (scanner.nextInt()); 
      System.out.print("Enter the size of the column:"); 
      sizeColumn = scanner.nextInt(); 
      return false; 
     } 
     catch (NumberFormatException e) 
     { 
      System.out.println("Enter valid value for size:"); 
     } 
     return true; 
    }  
    ... 
} 
1

후 가능성이 있습니다 잘못된 코드 경우 :

  • 이 문을 실행하기 이전, 당신은 할당 된 다른 개체와 사용 가능한 거의 모든을 소비 한 그렇게하는 공간. 이 말씀은 낙타의 등을 돌리는 속담입니다.

  • sizeRowsizeColumn의 값은 사용자가 생각하는 것과 다릅니다.

코드를 더 이상 볼 수 없으면이 두 가지 가능성을 구분할 수 없습니다.


UPDATE은 - 안드레이는 업데이트 된 코드를 기반으로, 문제를 발견했다. 크기를 잘못 읽으므로 잘못되었거나 매우 큰 크기 값이됩니다. 이로 인해 응용 프로그램에 배열의 큰 배열을 할당하려고 시도하는 중 ... OOME에게주는 것입니다.

+0

예, 맞습니다.하지만 제 경우에는이 메서드를 한 번만 호출합니다. –

+0

내 질문에 EDIT를 참조하십시오. –

관련 문제