If I have:
int c[] = new int[10];
and
int a[][] = new int[2][3];
and in generally
an n*m*..*j
array
how can I calculate the real memory usage considering also the references variables?
If I have:
int c[] = new int[10];
and
int a[][] = new int[2][3];
and in generally
an n*m*..*j
array
how can I calculate the real memory usage considering also the references variables?
The int[]
or int[][]
is not a primitive data type. It is an Object in Java. And with an Object, the size cannot be calculated straight away.
If you want an accurate answer, you can't. At least not in any easy way. This thread explains more.
The trouble with Bragaadeesh's and Bakkal's answers are that they ignore overhead. Each array also stores things like the number of dimensions it has, how long it is and some stuff the garbage collector uses.
For a simple estimate, you should be fine by using the calculations from the other answers and adding 100-200 bytes.
you'll probably get the best approximation from this: http://java.sun.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getObjectSize(java.lang.Object)
This article, and this comprehensive one demonstrates/details this approach