Простая программа, выделяющая 1 многомерный массив, вызывает непрерывные GC (все сборщики мусора), если куча достаточно велика, чтобы создать внешний массив. Похоже, что GC пытается многократно. С сборкой продукта и кучей 6G выделение занимает 3 минуты.Многомерный массив в явном неактивном распределении памяти
С быстрой сборкой отладки выделение занимает более 20 минут.
Выделение 1-мерного массива, который занимает одну и ту же память, быстро и не выбрасывает исключение из памяти Почему?
public class Test {
public static void main(String[] args) {
int a1 = 1;
long maxMemory = Runtime.getRuntime().maxMemory();
int s = (int) (Math.sqrt(Math.sqrt((double) maxMemory)));
System.out.println("s: " + s);
int[][][][] a2;
try {
a2 = new int [s][s][s][s];
a2 [s-1][s-1][s-1][s-1] = a1;
if (a2 [s-1][s-1][s-1][s-1] != 1) {
throw new RuntimeException("Error: " + a2 [s-1][s-1][s-1][s-1]);
}
} catch (OutOfMemoryError e) {
System.out.println("Passed.");
}
}
}
Спасибо за указатель @Lolo –