Я объявил матрицу двумерного массива в Java байта типа. При проверке памяти, используемой с размерами (10 ^ 6 x 4), она резко отличалась от матрицы того же размера, но с размерами (4 x 10 ^ 6).
// Measure memory before matrix initialization -> 2MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory())/(1000*1000)+"M");
byte[][] test = new byte[4][1000000]; // init
// Measuring memory after -> 6MB as expected
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory())/(1000*1000)+"M");
// Measure memory before matrix initialization -> 2MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory())/(1000*1000)+"M");
byte[][] test = new byte[1000000][4]; // init
// Measuring memory after -> 30MB
System.out.println("Meg used="+(Runtime.getRuntime().totalMemory()-
Runtime.getRuntime().freeMemory())/(1000*1000)+"M");
В первом Я получаю 6 МБ, поэтому массив занимает 4 МБ, как и ожидалось. Однако во втором случае матрица занимает 28 МБ. Почему они не равны?