sé que estoy un poco tarde a la fiesta, pero en realidad no es extremadamente difícil de calcular la huella de memoria.
permite echar su primer ejemplo: int c[] = new int[N];
De acuerdo con el modelo de memoria de 64 bits, un int es de 4 bytes, por lo que todos los elementos serán 4 * n bytes de tamaño. Además de eso, Java tiene una sobrecarga de matriz de 24 bytes y también hay 8 bytes para el objeto de matriz real. Entonces eso es un total de 32 + 4 * N bytes.
Para una matriz de 2 dimensiones: int a[][] = new int[N][M];
Es básicamente el mismo sólo que cada elemento de la primera matriz es otra matriz de tamaño M, por lo que en lugar de 4 tenemos 32 + 4 * M, por lo que el tamaño total es 32 + (32 + 4 * M) * N.
Es cierto que una generalización para las dimensiones D es bastante complicada, pero se entiende la idea.
¿Hay alguna motivación detrás de obtener el "uso real de la memoria" de esas matrices? – bakkal