java.lang.OutOfMemoryError: пространство кучи Java, для относительно небольшой матрицы - PullRequest
0 голосов
/ 20 сентября 2019

Хотя я понимаю, что для больших матриц может не хватить оперативной памяти.Однако в этом случае значение является относительно небольшим (9999).Значение является двойным (4,0) и, таким образом, содержит, согласно моим ресурсам, 8 байтов данных (за двойное).Таким образом, теоретически, матрица с n = 9999 (n = число от числа столбцов и строк) должна была бы (9999 ^ 2 * 8) байтов в Java (не включая какие-либо накладные расходы), что значительно меньше моего текущего оперативной памяти,даже если там было несколько матриц (2-3).Ошибка возникает при инициализации матрицы A.

Почему происходит ошибка?

int n = 9999;

double[][] matrixA = new double[n][n];
double[][] matrixB = new double[n][n];

// Matrix Multiply uses standard ijk algorithm to multiply matrixA and matrixB
// and returns a 2d double array (matrix)

double[][] matrixC = MatrixMultiply(matrixA, matrixB);

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

9999x9999x8 = 799840008 байт данных.

Вы настраиваете свои настройки памяти JVM?По умолчанию для клиентской JVM установлено 256 мег.Неважно, если ваша системная память достаточно высока, если JVM не установлена ​​должным образом.

Подробнее о настройке параметров кучи JVM здесь: Каковы параметры -Xms и -Xmx при запуске JVM?

1 голос
/ 20 сентября 2019

8 байтов на дубликаты, матрица 10 000 x 10000 дает 800 МБ на матрицу.2 или 3 из них 2-3Gb.Довольно скоро мы говорим о реальной памяти.

Чтобы выяснить, сколько памяти, по мнению Java, имеет при запуске, выполните:

java -XX:+PrintFlagsFinal -version | grep MaxHeapSize

, а затем увеличьте объем выделяемой памятив Java во время выполнения:

java -Xmx16G ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...