OutOfMemory错误java堆空间

OutOfMemory错误java堆空间,java,memory-management,anti-patterns,Java,Memory Management,Anti Patterns,我用的是这句话 //some code int a[][]=new int[5000000][5000000]; //some code 并用命令运行它 java -mx512m Test 它给出了OutOFMemoryError:Java堆空间,指示stacktrace中提到的语句的行号 我如何解决这个问题 编辑: 我正试图解决一个问题,你的内存太多了。少用或多用。每个int元素是32位。而且512MB的内存限制比您想象的要小得多。对于int[5000000][5000000],您需要10

我用的是这句话

//some code
int a[][]=new int[5000000][5000000];
//some code
并用命令运行它

java -mx512m Test
它给出了OutOFMemoryError:Java堆空间,指示stacktrace中提到的语句的行号

我如何解决这个问题

编辑:
我正试图解决一个问题,你的内存太多了。少用或多用。每个int元素是32位。而且512MB的内存限制比您想象的要小得多。

对于int[5000000][5000000],您需要1000000000000B或1000000GB。所以你只能等大约100年,这样的事情是可能的。

< P>你可能需要考虑一个解决问题的方法,它需要更少的内存。 从Google Calculator(假设为64位整数大小):


这是25万亿整数,每个整数需要4个字节,所以总共需要100万亿字节。最简单的解决方案是购买约90 TB的RAM和64位操作系统


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

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

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

在其他答案中,你的命令有一个输入错误


它应该是:
java-Xmx512M-Test

我认为您正在寻找的数据结构是一个稀疏矩阵。将元素及其坐标存储在地图数据结构中(例如,2d稀疏数组的
map
),只需假设地图中没有的任何元素为零。

我在Eclips中也遇到过同样的问题 解决方案是将mx512m修改为mx4096m或mx2048m(扩展允许的最大内存限制) 因此,在您的情况下,请尝试使用命令
java-mx4096m测试允许java使用4GB内存

使用25万亿整数矩阵,您到底想实现什么?天哪,您真的认为您可以在允许算法使用的3秒内分配并迭代100TB的数据吗?首先让它工作,然后优化!实际上,我正试图解决codechef上的一个实践问题。我想我需要一个这样大小的矩阵。如果通过对内存中的整个字段进行建模来解决问题,则需要一个90 TB的阵列,这是一个很好的信号,表明有更好的方法来解决问题。我想你必须找到一种方法来确定一个给定的正方形是否是黑色的,而不是模拟机器人所经历的整个过程。是的,我想我应该改变方法。但有一件事,如果我将类型从int转换为byte,它会有帮助吗?您只需要分配1B*5M*5M=25 TB的内存。想把它挤成一小块吗?还是3TB。你真的认为这会让你有进展吗?java int被指定为32位。我对java的细节不太熟悉,所以我假设64位计算机的默认整数大小。所以我可能会减少93000 GB左右。是的,我想我会走这条路。。对于稀疏矩阵的概念,它将节省内存和迭代时间+1,尽管我建议使用不需要太多复杂的键类型。比如
Map
或者其他专门制作的密钥类,它只是两个INT的容器。你真的认为100000 GB的经济性需要100年吗?打个友好的赌怎么样?胜利者可以得到一个10000 Gb的USB密钥。
(5 000 000^2) * 64 bits = 186 264.515 gigabytes