I am trying to read a 2.5 GB TXT file in my application. I am running Win7 x64 and have 43 GB of available memory (out of 64 GB). I tried playing with -Xmx -XX: MaxParmSize -XX: ParmSize, etc. None of this affects the error. What else could I try? This mistake seems very strange, since I, of course, have enough space for heaps.
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit at java.util.Arrays.copyOf(Unknown Source) at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source) at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source) at java.lang.AbstractStringBuilder.append(Unknown Source) at java.lang.StringBuilder.append(Unknown Source) at j.utilities.IO.loadString(IO.java:187) at j.utilities.IO.loadString(IO.java:169) at city.PreProcess.main(PreProcess.java:78)
I run
java version "1.7.0_09" Java(TM) SE Runtime Environment (build 1.7.0_09-b05) Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
Thank you very much in advance.
=============== ANSWER ===============
Ok i just tested it with
StringBuilder sb = new StringBuilder(); for ( int i=1; i<Integer.MAX_VALUE; i++ ) sb.append("x");
and received
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit at java.util.Arrays.copyOf(Unknown Source) ...
So this is really a StringBuilder that is trying to build an array larger than Integer.MAX_VALUE.
In case of interest
StringBuilder sb = new StringBuilder(); int i=1; try { for ( ; i<Integer.MAX_VALUE; i++ ) sb.append("x"); } catch ( OutOfMemoryError e ) { System.out.println(i);
With StringBuilder you can copy 1 207 955 550 characters - much less Integer.MAX_VALUE.
source share