I am doing very small program in java using Eclipse Kepler IDE.
I am allocating the size of the array at run time using the following statement.
unSortedArray = new int[sizeRow][sizeColumn];
so as per my knowledge the java program runs with some of its own heap space like 32 MB.
And for my program i think this space is enough.
I just given the value sizeRow=3
and sizeColumn=3
at runtime.
And when i pressed enter it gives the following Exception java.lang.OutOfMemoryError: Java heap space
I put this question to understand why it happens and how we can handle it?
I already read the following link.
java.lang.OutOfMemoryError: Java heap space
How to deal with “java.lang.OutOfMemoryError: Java heap space” error (64MB heap size)
EDIT: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(); } }
In my case i am calling these method only once.
Advertisement
Answer
The problems is here:
dataInputStream.readInt()
This would read a binary value from your input which would be like 2323827382 for your entered “1251” causing the OOM.
Try to use Scanner
to read your integers like this:
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; } ... }