Если я имею:
int c[] = new int[10];
и
int a[][] = new int[2][3];
и в обычно
n*m*..*j
массив
как я могу вычислить использование реальной памяти, рассматривающее также ссылочные переменные?
Если вы хотите получить точный ответ, вы не можете. По крайней мере, не в каком-то простом смысле. Эта тема объясняет больше.
Проблема с ответами Брагадиша и Баккала в том, что они игнорируют накладные расходы. Каждый массив также хранит такие вещи, как количество измерений, которые он имеет, как долго он и некоторые вещи, которые использует сборщик мусора.
Для простой оценки вы должны быть в порядке, используя вычисления из других ответов и добавляя 100-200 байт.
int []
или int [] []
не является примитивным типом данных. Это объект в Java. А с Object размер не может быть рассчитан сразу.
вы, вероятно, получите лучшее приближение из этого: http://java.sun.com/javase/6/docs/api/java/lang/instrument/Instrumentation. html # getObjectSize (java.lang.Object)
Эта статья и эта исчерпывающая демонстрируют / подробно описывают этот подход