我是Java的初学者,我尝试制作一个将两个矩阵求和的代码,但出现错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at Main.main(Main.java:11)


我尝试了所有这些命令:

$ java Main
$ java Main -Xmx2048m
$ java Main -Xms1024m
$ java Main -Xms1024m -Xmx2048m
$ java -Xmx2048m Main
$ java -Xms1024m Main
$ java -Xms1024m -Xmx2048m Main


但是所有人都给出相同的错误信息...

这是代码:

public class Main
{
    public static void main(String[] args)
    {
        final int n = 10000;

        double A[][] = new double[n][n];
        double B[][] = new double[n][n];
        double S[][] = new double[n][n];

        int i,j;

        for (i = 0; i<n; i++)
        {
            for (j = 0; j<n; j++)
            {
                A[i][j] = 1.0d / ((double) i*j);
                B[i][j] = 1.0d / ((double) i*j);
            }
        }

        for (i = 0; i<n; i++)
        {
            for (j = 0; j<n; j++)
            {
                S[i][j] = A[i][j] + B[i][j];
            }
        }
    }
}


因此,您可以看到,此代码需要〜3x8x10000 B = 240 000 B 我的Java版本:

$ java -version
openjdk version "11.0.4" 2019-07-16
OpenJDK Runtime Environment (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3)
OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3,     mixed mode, sharing)

最佳答案

这些标志有效,但是您的数学不检出。

您有3个数组,每个数组都有10 000 * 10 000 * 8B个值。
为此,您需要3 * 10 000 * 10 000 * 8 Bytes ...即2289 MB
这已经超过了2048

除此之外,每个3数组都包含10 000引用...但是与值相比,其内存开销很小(小于1MB)。

关于java - java.lang.OutOfMemoryError:Java堆空间错误无法通过-Xmx和-Xms解决,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58041729/

10-11 12:45
查看更多