OutOfMemoryError java堆空间

时间:2010-08-16 20:46:51

标签: java memory-management anti-patterns

我正在使用此声明

//some code
int a[][]=new int[5000000][5000000];
//some code

并使用命令

运行它
java -mx512m Test

它给出OutOFMemoryError:Java堆空间,指示堆栈跟踪中提到的语句的行号

我如何解决这个问题

编辑: 我正在尝试解决practice problem on codechef

8 个答案:

答案 0 :(得分:8)

您可能需要考虑解决问题的方法,这需要更少的内存。

来自Google Calculator(假设64位整数):

(5 000 000^2) * 64 bits = 186 264.515 gigabytes

答案 1 :(得分:4)

我认为您正在寻找的数据结构是稀疏矩阵。将元素及其坐标存储在地图数据结构中(例如,Map<Integer,Map<Integer,Integer>>用于2d稀疏数组),并假设不在地图中的任何内容为零。

答案 2 :(得分:3)

嗯,这是25万亿英镑,每个占用4个字节,总计100万亿字节。最简单的解决方案是购买~90TB的RAM和64位操作系统。

说真的,正确的解决方案可能是分配一个更合理的数据结构,可以更有效地存储数据,假设您实际上不需要一次将90 TB的数据加载到RAM中。也许如果你发布更多关于这个问题的信息,我们可以给出更好的答案吗?

答案 3 :(得分:1)

在其他答案中,你的命令中有一个拼写错误。

应该是:java -Xmx512M Test

答案 4 :(得分:0)

你使用的内存太多了。少用或少用。每个int元素都是32位。而你的512MB内存限制远远低于你的想象。

答案 5 :(得分:0)

对于int [5000000] [5000000],您需要100000000000000B或100000GB。所以你只能等待大约100年才能实现这样的目标。

答案 6 :(得分:0)

您需要一个更加开明的数据结构。除非你真的需要25万亿个整数,这是值得怀疑的。

答案 7 :(得分:0)

这是一个包含500万列和500万行的矩阵。这真的是你想要的吗?