Java 3D数组大小的轻微增加会导致分配时间的大幅增加

Java 3D数组大小的轻微增加会导致分配时间的大幅增加,java,arrays,multidimensional-array,time,Java,Arrays,Multidimensional Array,Time,在Java中,创建一个3D数组作为double[]testArray=newdouble[5][1500000][2](增加堆大小后)在我的计算机上运行大约2秒钟。然而,将第二维度增加十倍,从1500000增加到1500000,会导致分配时间大幅增加;我让程序在我的机器上运行了45分钟,但它没有终止。此外,创建一个数组作为double[]testArray=new double[15000000],该数组应包含与大型3D数组相同数量的双倍数组,运行时间不到一秒。为什么将第二维度增加十倍会导致分配

在Java中,创建一个3D数组作为
double[]testArray=newdouble[5][1500000][2](增加堆大小后)在我的计算机上运行大约2秒钟。然而,将第二维度增加十倍,从1500000增加到1500000,会导致分配时间大幅增加;我让程序在我的机器上运行了45分钟,但它没有终止。此外,创建一个数组作为
double[]testArray=new double[15000000]
,该数组应包含与大型3D数组相同数量的双倍数组,运行时间不到一秒。为什么将第二维度增加十倍会导致分配时间大幅增加?(我正在编写的一个程序要求我创建一个大小为
[5][15000000][2]
的3D数组)

大小从150万增加到1500万的十倍是一个大的增加,而不是一个小的增加。较大的大小有1.5亿个元素,每个元素8字节,即12亿字节。您可能需要增加堆的大小。@NomadMaker即使我从未收到内存错误,增加堆的大小也起到了作用。谢谢。@NomadMaker+
double[5][15\u 000][2]
对于用户数据来说是1.2G,但包括对象头和引用,至少在我拥有的所有Oracle JVM上,j7-13总共使用了2.7G——而且由于这必须全部放在“旧”空间中,所以总堆必须更大,根据我的测试,大约是3.5G或
-xms3500
。但是,如果我把它设置得足够大(ger)以超过可用的物理内存,那么它就会进行交换,这也会降低性能。