package net.i2p.stat; public class SizeMeasure { public static void main(String args[]) { testRateSize(100); //117KB testRateSize(100000); // 4.5MB testRateSize(440000); // 44MB //testFrequencySize(100); // 114KB //testFrequencySize(100000); // 5.3MB //testFrequencySize(1000000); // 52MB } private static void testRateSize(int num) { Runtime.getRuntime().gc(); Rate rate[] = new Rate[num]; long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); long usedPer = used / num; System.out .println(num + ": create array - Used: " + used + " bytes (or " + usedPer + " bytes per array entry)"); int i = 0; try { for (; i < num; i++) rate[i] = new Rate(1234); } catch (OutOfMemoryError oom) { rate = null; Runtime.getRuntime().gc(); System.out.println("Ran out of memory when creating rate " + i); return; } Runtime.getRuntime().gc(); long usedObjects = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); usedPer = usedObjects / num; System.out.println(num + ": create objects - Used: " + usedObjects + " bytes (or " + usedPer + " bytes per rate)"); rate = null; Runtime.getRuntime().gc(); } private static void testFrequencySize(int num) { Runtime.getRuntime().gc(); Frequency freq[] = new Frequency[num]; long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); long usedPer = used / num; System.out .println(num + ": create array - Used: " + used + " bytes (or " + usedPer + " bytes per array entry)"); for (int i = 0; i < num; i++) freq[i] = new Frequency(1234); Runtime.getRuntime().gc(); long usedObjects = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); usedPer = usedObjects / num; System.out.println(num + ": create objects - Used: " + usedObjects + " bytes (or " + usedPer + " bytes per frequency)"); freq = null; Runtime.getRuntime().gc(); } }