创建2维int数组时出现内存异常

时间:2014-04-24 08:12:10

标签: java arrays performance

我有:

int [][] lengths=null;

我必须根据运行时参数初始化它。

当我的数组大小为OutOfMemoryException或更多时,我得到int[13000][130000]

有没有办法解决这个或任何其他方法?

3 个答案:

答案 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使用的最大值。