1 3 9 public class Sizeof { 10 public static void main(String [] args) throws Exception { 11 runGC(); 13 usedMemory(); 14 15 final int count = 10000; Object [] objects = new Object [count]; 18 19 long heap1 = 0; 20 21 for (int i = -1; i < count; ++ i) { 23 Object object; 24 25 27 object = new Object (); 35 if (i >= 0) 36 objects [i] = object; 37 else { 38 object = null; runGC(); 40 heap1 = usedMemory(); } 42 } 43 44 runGC(); 45 long heap2 = usedMemory(); 47 final int size = Math.round(((float)(heap2 - heap1))/count); 48 System.out.println("'before' heap: " + heap1 + 49 ", 'after' heap: " + heap2); 50 System.out.println("heap delta: " + (heap2 - heap1) + 51 ", {" + objects [0].getClass() + "} size = " + size + " bytes"); 52 } 53 54 public static String createString(final int length) { 57 final char [] result = new char [length]; 58 for (int i = 0; i < length; ++ i) 59 result [i] = (char) i; 60 61 return new String (result); 62 } 63 64 private static void runGC() throws Exception { 68 for (int r = 0; r < 4; ++ r) 71 _runGC(); 72 } 73 74 private static void _runGC() throws Exception { 75 long usedMem1 = usedMemory(), usedMem2 = Long.MAX_VALUE; 76 77 for (int i = 0; (usedMem1 < usedMem2) && (i < 1000); ++ i) { 78 s_runtime.runFinalization(); 79 s_runtime.gc(); 80 Thread.currentThread().yield(); 81 82 usedMem2 = usedMem1; 83 usedMem1 = usedMemory(); 84 } 85 } 86 87 private static long usedMemory() { 88 return s_runtime.totalMemory() - s_runtime.freeMemory(); 89 } 90 91 private static final Runtime s_runtime = Runtime.getRuntime(); 92 } 93
| Popular Tags
|