title: Java Memory Overhead
body: <p>I would like to ask about Memory Overhead in java,
  I have a large ArrayList (61,770 items), and trying to calculate the amount of memory taken by each item (counting the object and its ArrayList entry),
  by profiling the app i get that after all the data is loaded, the heap takes ~ 25Mb.
  when the ArrayList has only 2 items the heap takes ~1Mb , so roughly:</p>
  
  <p>(24*1024*1024)/61,768 = 407 bytes.</p>
  
  <p><strong>however</strong>, when i count the fields of the each object, i get 148 bytes(not including the ArrayList, and assuming int=4,float=4,reference=4), I am curious to know where did all of those extra bytes came from...</p>
  
  <p>i can guess that since the objects I store in the ArrayList are implementing an interface, they store extra values, maybe the VM stores a 4byte function pointer for each implemented method?
  the interface they implement have 20 functions so thats 80 more bytes, totaling 228 bytes, still not close to the 400 bytes measured.</p>
  
  <p>any help would be appreciated.</p>
  
  <hr>
  
  <p>wow, thanks for all the great answers.</p>
  
  <p>@Bolo: thanks for the link ,with this class i measure ~350 bytes per object so I can least confirm the source of the large memory usage.</p>
  
  <p>@Yuval A: thank you for that presentation, a valuable source of information.</p>
  
  <p>@Ukko: point noted.</p>
  
  <p>@Jayan: right now NetBeans profiler is giving me errors when i try to dump the heap, will try later again.</p>