我是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 <2048 MB。 我的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)
答案 0 :(得分:1)
标志有效,但是您的数学不检出。
您有3
个数组,每个数组都有10 000 * 10 000 * 8B
个值。
为此,您需要3 * 10 000 * 10 000 * 8 Bytes
... 2289 MB
。
这已经超过2048
。
此外,每个3
数组都包含10 000
个引用……但是与值相比,其内存开销很小(小于1MB
)。 / p>
答案 1 :(得分:0)
我可以在没有任何Xms或Xmx设置的情况下运行您的代码。我的笔记本电脑的RAM为16 GB。