我有:
int [][] lengths=null;
我必须根据运行时参数初始化它。
当我的数组大小为OutOfMemoryException
或更多时,我得到int[13000][130000]
。
有没有办法解决这个或任何其他方法?
答案 0 :(得分:1)
注意:这不应该阻止OutOfMemoryError
,但您需要了解JVM
内存参数,因为它对任何情况都有帮助。
您需要查看JVM
内存参数。实际上,您可以根据需要为JVM
设置尽可能多的内存:
-Xmx2048m -> this param to set the max memory that the JVM can allocate
-Xms1024m -> the init memory that JVM will allocate on the start up
-XX:MaxPermSize=512M -> this for the max Permanent Generation memory
您可能也想检查这些参数。
-XX:MaxNewSize= -> this could be 40% from your Xmx value
-XX:NewSize=614m -> this could be 40% from your Xmx value
你也可以告诉你JVM
使用什么类型的GC
(我认为它在早期版本中已默认使用)
-XX:+UseConcMarkSweepGC
答案 1 :(得分:0)
如果您填写此网格的每个单元格并非绝对必要,nested lists可能是一种更智能的方法。可以把它想象成一个充满各种大小的1D阵列的一维阵列。作为数据类型,它们对于在运行时提供的值特别有用,因此如果您不希望或不允许增加您的mem cap,如Salahs的答案中所述,请将此视为替代。
答案 2 :(得分:0)
整数需要4个字节的内存。您想要分配4 Byte * 13000 * 130000 = 6760000000 Byte
。那是~6,5千兆字节的内存。
如果您的计算机具有该内存量,则存在JVM参数以增加JVM使用的最大值。